Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#16 2014-04-08 01:03:54 Re : Agrandissement progressif du rayon d'un cercle.

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Agrandissement progressif du rayon d'un cercle.



Voilà un exemple de collision que tu pourras facilement implémenter dans ton code :

ArrayList<Balle> balles;

void setup() {
  size (600, 600);
  balles = new ArrayList<Balle>();
  for (int i = 0; i < 10; i++) {
    balles.add(new Balle(i));
  }
  noStroke();
}

void draw() {
  background(255);
  for (Balle b : balles) {
    b.mettreAJour();
    b.collision(balles);
    b.afficher();
  }
}

class Balle {
  PVector position, vitesse;
  int id, vitesseMax, rayon;
  color couleur;
  float masse;

  Balle(int _id) {
    vitesseMax = 5;
    rayon = 20;
    position = new PVector(random(rayon, width - rayon), random(rayon, height - rayon));
    vitesse = PVector.random2D();
    vitesse.mult(random(vitesseMax / 3, vitesseMax));
    couleur = color(255, 0, 0);
    masse = random(2, 10);
    id = _id;
  }

  void mettreAJour() {
    vitesse.limit(vitesseMax);
    position.add(vitesse);
  }

  void collision(ArrayList<Balle> autres) {
    // Balles
    for (int i = id + 1; i < autres.size(); i++) {
      Balle b = autres.get(i);
      if (position.dist(b.position) <= (b.rayon + rayon)) {
        PVector d = PVector.sub(b.position, position);
        d.setMag(rayon + b.rayon);
        d.add(position);
        d.sub(b.position);
        vitesse.sub(d);
        b.vitesse.add(d);
      }
    }

    // Murs
    if ((position.x < rayon) || (position.x > (width - rayon))) {
      vitesse.x *= - 1;
    }
    if ((position.y < rayon) || (position.y > (height - rayon))) {
      vitesse.y *= -1;
    }
  }

  void afficher() {
    fill(couleur);
    ellipse(position.x, position.y, 2 * rayon, 2 * rayon);
  }
}

Hors ligne

 

#17 2014-04-08 05:37:27 Re : Agrandissement progressif du rayon d'un cercle.

fabrice54
membre
Date d'inscription: 2012-06-07
Messages: 242

Re: Agrandissement progressif du rayon d'un cercle.



d’après ce que j'avais compris, je croyais que  c'est toi tu voulais modifier les angles;mais pour en revenir à tes problèmes de rebonds ,je t'ais envoyé un petit programme de balles qui rebondissent les unes sur les autres ,tu t'es aperçus que les rebonds se fonds très biens ,par contre dans ton programme il y à les balles qui se croisent et qui tremblent ;j'ai eus le même problème sur un autre programme;le default  venait de la gestion de la collision essaye de regarder comment est conçu le système de collision du petit programme et adapte le au tien;c'est mushussu qui m'a montré ce système avec un boolean bing=true
nous on fait :ex
distance=v1.dist(v2)
if distanse<20
inverser: deplacement*=-1:après peut importe ce que tu met à la place du -1.

cela parait normal mais ça ne fonctionne pas bien;mushussu pourrait t'expliquer pourquoi ;mais moi je ne sais pas;je pense que c'est la position dans le programme de la fonction d'inversion qui fait la différence.Mais la je viens de voir que mushussu t'a envoyé un programme de collision il fonctionne très bien.

Bon courage .

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2025