Bonjour.
Dans un programme avec deux class j'aimerais implanter les lignes suivantes.Si la syntaxe est correcte?mais comme il y a deux class les vecteurs ne sont pas déclarés dans le draw.Comment faire?C'est peut être là qu'il faut des Heritage?.J'ai repris en gros l'exemple de notre camarade avec virus et cellule .
Merci.
for(int i=0;i<nb;i++){
float distance_virus=position1.dist(i.position);
print(distance_virus," ");
}
Voici le programme.
int nb=20; Cellule[] cellule=new Cellule[nb]; Virus virus; void setup(){ size(500,500,P3D); virus=new Virus(); for(int i=0;i<nb;i++){ cellule[i]=new Cellule(); } } void draw(){ background(100); virus.deplacement(); virus.rebond(); virus.display(); for(int i=0;i<nb;i++){ cellule[i].deplacement(); cellule[i].rebond(); } for(int i=0;i<nb;i++){ for(int j=i+1;j<nb;j++){ cellule[i].collision(cellule[j]); } } for(int i=0;i<nb;i++){ cellule[i].display(); } } class Cellule{ PVector position; PVector deplacement; int diametre; color couleur; boolean bing; Cellule(){ position=new PVector(random(0,width),random(0,height)); deplacement=new PVector(random(-2,2),random(-2,2)); diametre=20; couleur=color(255,0,255); } void deplacement(){ position.add(deplacement); } void rebond(){ if(position.x<0||position.x>width){ deplacement.x=deplacement.x*-1; } if(position.y<0||position.y>height){ deplacement.y=deplacement.y*-1; } } void collision(Cellule j){ float distance=position.dist(j.position); if(distance<20){ bing=true; } } void display(){ if(bing){ fill(0); } else{ fill(255); } ellipse(position.x,position.y,diametre,diametre); } } class Virus{ PVector position1; PVector deplacement; Virus(){ position1=new PVector(random(0,width),random(0,height)); deplacement=new PVector(random(-2,2),random(-2,2)); } void deplacement(){ position1.add(deplacement); } void rebond(){ if(position1.x<0||position1.x>width){ deplacement.x=deplacement.x*-1; } if(position1.y<0||position1.y>height){ deplacement.y=deplacement.y*-1; } } void display(){ pushMatrix(); translate(position1.x,position1.y); sphereDetail(5); sphere(15); popMatrix(); } }
Hors ligne
Bonjour,
Je suppose que tu souhaites calculer la distance entre le virus et les cellules ?
En fait j'ai créer une nouvelle méthode qui à comme paramètre un tableau de cellule. Ensuite je peux calculer la distance par une simple itération.
int nb=20; Cellule[] cellule=new Cellule[nb]; Virus virus; void setup() { size(500, 500, P3D); virus=new Virus(); for (int i=0; i<nb; i++) { cellule[i]=new Cellule(); } } void draw() { background(100); virus.deplacement(); virus.distance(cellule); virus.rebond(); virus.display(); for (int i=0; i<nb; i++) { cellule[i].deplacement(); cellule[i].rebond(); } for (int i=0; i<nb; i++) { for (int j=i+1; j<nb; j++) { cellule[i].collision(cellule[j]); } } for (int i=0; i<nb; i++) { cellule[i].display(); } } class Cellule { PVector position; PVector deplacement; int diametre; color couleur; boolean bing; Cellule() { position=new PVector(random(0, width), random(0, height)); deplacement=new PVector(random(-2, 2), random(-2, 2)); diametre=20; couleur=color(255, 0, 255); } void deplacement() { position.add(deplacement); } void rebond() { if (position.x<0||position.x>width) { deplacement.x=deplacement.x*-1; } if (position.y<0||position.y>height) { deplacement.y=deplacement.y*-1; } } void collision(Cellule j) { float distance=position.dist(j.position); if (distance<20) { bing=true; } } void display() { if (bing) { fill(0); } else { fill(255); } ellipse(position.x, position.y, diametre, diametre); } } class Virus { PVector position1; PVector deplacement; Virus() { position1=new PVector(random(0, width), random(0, height)); deplacement=new PVector(random(-2, 2), random(-2, 2)); } void deplacement() { position1.add(deplacement); } void rebond() { if (position1.x<0||position1.x>width) { deplacement.x=deplacement.x*-1; } if (position1.y<0||position1.y>height) { deplacement.y=deplacement.y*-1; } } void display() { pushMatrix(); translate(position1.x, position1.y); sphereDetail(5); sphere(15); popMatrix(); } void distance(Cellule[] cel) { for (int i=0; i<cel.length; i++) { float distance_virus=position1.dist(cel[i].position); print(distance_virus, " "); } println(); println(); } }
Hors ligne
Merci pour la démonstration et le programme;car j'étais partis sur un truc du genre comme le vecteur position1 n'est pas initailisé dans la class cellule et vice-verça tu vois le problème.D'autre part y a t'il un principe qui permet de faire fonctionner par exemple la class Virus et la class cellule on le même déplacement donc on écris pour chaque class la même méthode est il possible d'écrire la même méthode et que cela serve pour les deux class.
Hors ligne
Bien sûr, tu l'as déjà évoqué plus haut. C'est la notion d'héritage. Tu créer une classe qui deviendra la parente des deux autres.
int nb=20; Cellule[] cellule=new Cellule[nb]; Virus virus; void setup() { size(500, 500, P3D); virus=new Virus(); for (int i=0; i<nb; i++) { cellule[i]=new Cellule(); } } void draw() { background(100); virus.deplacement(); virus.distance(cellule); virus.rebond(); virus.display(); for (int i=0; i<nb; i++) { cellule[i].deplacement(); cellule[i].rebond(); } for (int i=0; i<nb; i++) { for (int j=i+1; j<nb; j++) { cellule[i].collision(cellule[j]); } } for (int i=0; i<nb; i++) { cellule[i].display(); } } class Organisme { PVector position; PVector deplacement; Organisme () { position=new PVector(random(0, width), random(0, height)); deplacement=new PVector(random(-2, 2), random(-2, 2)); } void deplacement() { position.add(deplacement); } void rebond() { if (position.x<0||position.x>width) { deplacement.x=deplacement.x*-1; } if (position.y<0||position.y>height) { deplacement.y=deplacement.y*-1; } } } class Cellule extends Organisme { int diametre; color couleur; boolean bing; Cellule() { super(); // Appel au constructeur de la super-classe diametre=20; couleur=color(255, 0, 255); } void collision(Cellule j) { float distance=position.dist(j.position); if (distance<20) { bing=true; } } void display() { if (bing) { fill(0); } else { fill(255); } ellipse(position.x, position.y, diametre, diametre); } } class Virus extends Organisme { Virus() { super(); // Appel au constructeur de la super-classe } void display() { pushMatrix(); translate(position.x, position.y); sphereDetail(5); sphere(15); popMatrix(); } void distance(Cellule[] cel) { for (int i=0; i<cel.length; i++) { float distance_virus=position.dist(cel[i].position); print(distance_virus, " "); } println(); println(); } }
Si tu veux approfondir ces notions, POO, héritage … Un MOOC vient de commencer :
http://class.coursera.org/intropoojava-001
Hors ligne
C'est beaucoup plus clair;j'avais regardé quelques exemples, j'avais compris que l'on pouvais passer des données grâce a la fonction extends ;mais je n'avais pas compris la fonction super ,pour le MOOC il est très intéressant ,mais le cour de l'intervenante féminine est totalement inaudible sur mon système, même le son au max c'est dommage.
Merci pour toutes les explications.
Hors ligne