» codelab : http://codelab.fr/accueil » Forum : Processing : http://codelab.fr/processing » distance entre plusieurs ojets : http://codelab.fr/4505 Ceci est la version imprimable d'un sujet du forum, pour retourner à la version complète : distance entre plusieurs ojets |
fabrice54 — 2013-09-26 05:21:06 |
bonjour |
Mushussu — 2013-09-26 19:27:22 |
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; } } } |
fabrice54 — 2013-09-27 04:01:35 |
merci pour tes explications et ton programme c'est beaucoup plus clair maintenant ,et pour le programme vecteur, |
Mushussu — 2013-09-27 18:40:36 |
Eviv baledoc |