Bonjour!
Mon problème en ce jours est double. Je vais cependant commencer par le premier, je détaillerai le second plus tard...
J'essaie de faire correspondre la position d'une balle (ellipse) à celle d'une reconnaissance visuel dans un autre sketch processing par osc. Cela fonctionne parfaitement jusqu'à ce que je transforme ma simple ellipse en class Ball...
Le but à terme est que cette balle vienne percuter des rectangles. Mon second problème est l'introduction de la vélocité de cette dite balle...
J'espère avoir été le plus clair possible...
Merci d'avance!
Dernière modification par duke duker (2013-12-12 10:32:44)
Hors ligne
Et le sketch de position par osc
Hors ligne
bonjour
je n'ais pas compris ton programme,je l'ais télécharger mais rien ne se passe.Je T'envois un programme avec des ellipses et des rectangles qui se déplacent,mais je ne sais pas si sa va pouvoir t'aider.
Balle[]maballe=new Balle[10]; Boite[]maboite=new Boite[10]; void setup() { size(500,500); for(int i=0;i<10;i++) { maballe[i]=new Balle(random(width),random(height)); maboite[i]=new Boite(random(width),random(height)); } } void draw() { background(255); for(int i=0;i<10;i++) { maballe[i].display(); maballe[i].mouvement(); maballe[i].collision(); maboite[i].display(); maboite[i].mouvement(); maboite[i].collision(); } } class Balle{ PVector position; PVector mouvement; Balle(float px,float py){ position=new PVector(px,py); mouvement=new PVector(-1,1); } void display() { ellipse(position.x,position.y,20,20); } void mouvement() { position.add(mouvement); } void collision() { if(position.x<0||position.x>width) { mouvement.x=mouvement.x*-1; } if(position.y<0||position.y>height) { mouvement.y=mouvement.y*-1; } } } class Boite{ PVector position; PVector mouvement; Boite(float px,float py){ position=new PVector(px,py); mouvement=new PVector(1,-1); } void display() { rect(position.x,position.y,40,40); } void mouvement() { position.add(mouvement); } void collision() { if(position.x<0||position.x>width) { mouvement.x=mouvement.x*-1; } if(position.y<0||position.y>height) { mouvement.y=mouvement.y*-1; } } }
Hors ligne
Merci!
Mais j'arrive à faire ce genre de chose, ce que je voudrais c'est qu'une des balles, que je dirige grâce à ma webcam, vienne percuter les boites...
As-tu une idée?
Hors ligne
Bonjour,
Dans ta classe Ball, la méthode de mise à jour update ne donne pas une nouvelle valeur à ta variable position.
void update(PVector nouvellePosition) { oldPosition = Position; Position = nouvellePosition; }
et dans le draw() :
b.update(new PVector(moyX, moyY));
Hors ligne
En fait, les variables moyX et moyY viennent d'un autre sketch qui récupère la position d'un pointeur sur ma webcam. J'aimerais que ma Ball ait donc c'est valeurs pour position... Et ensuite arrivé à calculer la vitesse de cette balle en fonction de la dernière position... mais je ne suis pas du tout à l'aise avec les class
Merci pour votre réponse!
Hors ligne
J'ai bien compris ton souhait, c'est pour cela que je t'ai donné la réponse.
Pour la vitesse il suffit que tu insères dans la méthode update :
vitesse = Position - oldPosition;
Hors ligne
je te fais parvenir un programme de collision .
int nb=10; ArrayList<Balle>balle; void setup() { size(800, 700); balle=new ArrayList<Balle>(); for (int i=0;i<nb;i++) { balle.add(new Balle(random(width), random(height), -1, 1)); } } void draw() { background(255); for (int i=0;i<balle.size();i++) { Balle b=balle.get(i); b.rebondir(); b.bouger(); } for (int i=0;i<balle.size();i++) { for (int j = i + 1 ; j < balle.size(); j++) { Balle b=balle.get(i); Balle c=balle.get(j); b.collision(c); } } for (int i=0;i<balle.size();i++) { Balle b=balle.get(i); b.afficher(); } } class Balle { PVector position; PVector deplacement; int rayon; boolean bing; Balle(float px, float py, float dx, float dy) { position = new PVector(px, py); deplacement=new PVector (dx, dy); rayon = 20; } void rebondir() { bing = false; if (position.x > width|| position.x < 0) { deplacement.x=deplacement.x*-1; } if (position.y >height||position.y<0) { deplacement.y= deplacement.y* -1; } } void bouger() { position.add(deplacement); } void collision(Balle j) { float distance = position.dist(j.position); if (distance<40) { bing = true; j.bing = true; if(mousePressed) { balle.add(new Balle(mouseX,mouseY, -2, 1)); } if(balle.size()>30) { balle.remove(10); } else { fill(0, 255, 255); } } } void afficher() { if (bing) { deplacement.x=deplacement.x*-1; deplacement.y=deplacement.y*-1; } ellipse(position.x, position.y, 40, 40); } }
Hors ligne