Annonce

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


#1 2014-11-04 04:37:42 calcul distance double class.

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

calcul distance double class.



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.

Code (P5) :

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

 

#2 2014-11-04 06:05:29 Re : calcul distance double class.

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

Re: calcul distance double class.



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

 

#3 2014-11-04 07:05:04 Re : calcul distance double class.

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

Re: calcul distance double class.



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

 

#4 2014-11-04 20:16:01 Re : calcul distance double class.

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

Re: calcul distance double class.



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

 

#5 2014-11-05 03:07:00 Re : calcul distance double class.

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

Re: calcul distance double class.



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

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024