Annonce

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


#1 2013-09-26 05:21:06 distance entre plusieurs ojets

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

distance entre plusieurs ojets



bonjour

je voudrais détecter la distance entre plusieurs objets en mouvements pour des collisions, je comprends comment faire avec deux objets mais pas avec 10 ou plus avec les méthodes de classe.Car si je mets dans draw
balle[i].collisions je ne vois pas apres comment je compares les distances des balles à moins de faire des boucles et de tester les balles les unes par rapport aux autres ce qui va faire des milliers de calculs

int nb=100;
Balle[]balle=new Balle[nb];
void setup() {
size(800,700,P3D);
for(int i=0;i<nb;i++)
  {
   balle[i]=new Balle(random(50,500),random(50,500));
}
}
void draw() {
background(255);
for(int i=0;i<nb;i++)
{
balle[i].rebondir();
balle[i].bouger();
balle[i].dessiner();
}
}
class Balle{
  float x;
  float y;
  float deplacementX;
  float deplacementY;
Balle(float dx,float dy)
{
  x=dx;
  y=dy;
   deplacementX= random(-1,1);
  deplacementY= random(-1,1);
  }
void rebondir() {
  if (x > width) {
   deplacementX = -1;
}
  if (x < 0) {
   deplacementX = 1;
}
  if (y >height) {
   deplacementY = -1;
}
  if (y < 0) {
   deplacementY =1;
}

}
void bouger() {
x = x + deplacementX;
y = y + deplacementY;
}
void dessiner() {
  fill(255,0,255);
 
ellipse(x,y,15,15);
}
}
merci

Hors ligne

 

#2 2013-09-26 19:27:22 Re : distance entre plusieurs ojets

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

Re: distance entre plusieurs ojets



Pour chaque balle tu dois tester les autres balles environnantes. Quand tu as une position avec un x et un y, il est préférable d'utiliser des PVector pour manipuler les distances plus aisément.

Code (processing) :

int nb=10;

Balle[]balle=new Balle[nb];
void setup() {
  size(800, 700, P3D);
  for (int i=0;i<nb;i++) {
    balle[i]=new Balle(random(50, 500), random(50, 500));
  }
}

void draw() {
  background(255);
  for (int i=0;i<nb;i++) {
    balle[i].rebondir();
    balle[i].bouger();
  }
  for (int i=0;i<nb;i++) {
    for (int j = i + 1 ; j < nb; j++) {
      balle[i].collision(balle[j]);
    }
  }
  for (int i=0;i<nb;i++) {
    balle[i].dessiner();
  }
}

class Balle {
  PVector position;
  float deplacementX;
  float deplacementY;
  int rayon;
  boolean bing;

  Balle(float dx, float dy) {
    position = new PVector(dx, dy);
    deplacementX= random(-1, 1);
    deplacementY= random(-1, 1);
    rayon = 20;
    bing = false;
  }

  void rebondir() {
    if (position.x > width) {
      deplacementX = -1;
    }
    if (position.x < 0) {
      deplacementX = 1;
    }
    if (position.y >height) { 
      deplacementY = -1;
    }
    if (position.y < 0) {
      deplacementY =1;
    }
  }
  void bouger() {
    position.x += deplacementX;
    position.y += deplacementY;
    bing = false;
  }

  void dessiner() {
    if (bing) {
      fill(255, 0, 0);
    } 
    else {
      fill(255, 0, 255);
    }
    ellipse(position.x, position.y, 2 * rayon, 2 * rayon);
  }

  void collision(Balle balleExt) {
    float distance = position.dist(balleExt.position);
    if (distance < 2 * rayon) {
      bing = true;
      balleExt.bing = true;
    }
  }
}

Hors ligne

 

#3 2013-09-27 04:01:35 Re : distance entre plusieurs ojets

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

Re: distance entre plusieurs ojets



merci pour tes explications et ton programme c'est beaucoup plus clair maintenant ,et pour le programme vecteur,
car je me demandais quel angle il calculait ,je pensait qu'il me renvoyait l'angle de la tangente,c'est pour ça que je trouvais bizarre .

merci encore.

fabrice.

Hors ligne

 

#4 2013-09-27 18:40:36 Re : distance entre plusieurs ojets

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

Re: distance entre plusieurs ojets



Eviv baledoc

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024