Annonce

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


#1 2013-10-04 15:50:08 deplacement sphere

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

deplacement sphere



bonjour

un problème sur le logiciel suivant ,je pense que ça dois venir des accolades mais je ne trouves   pas la solution
besoin d'aide

merci.
int nb=10;
Sphere[]sphere=new Sphere[nb];
void setup()
{
  size(550,550,P3D);
for(int i=1;i<nb;i++)
{
  sphere[i]=new Sphere(random(50,500),random(50,500));
}
}
void draw()
{
background(0);
for(int i=0;i<nb;i++)
{
sphere[i].deplacement_sphere();
sphere[i].dessine_sphere();
}
class Sphere{
  PVector position;
  float deplacement_sphereX;
  float deplacement_sphereY;
  float radius;
  Sphere(float dx,float dy){
    position=new PVector(dx,dy);
    deplacement_sphereX=250+250* cos(radius);
    deplacement_sphereY=250+250 *sin (radius);
    radius = radius +0.025;
}
}
}
void deplacement_sphere()
{
position.x+=deplacement_sphereX;
position.y+=deplacement_sphereY;
}
void dessine_sphere()
{
  translate(position.x,position.y);
  fill(0,255,0);
sphere(20);
}

Hors ligne

 

#2 2013-10-04 17:07:32 Re : deplacement sphere

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

Re: deplacement sphere



Bonjour,

Il y avait une accolade mal placée. Pour t'aider, il existe l'outil Auto Format dans le menu Edit.

D'autre part, il faut faire attention, tu avais une boucle qui commençait à 1 et non à 0.

Il est nécessaire que tu trouves pour toi, une règle d'écriture, avec les espaces et les accolades, car pour l'instant c'est panaché :
http://formation.ubik-products.net/java/nommage.html

int nb = 10;
Sphere[] sphere;

void setup() {
  size(550, 550, P3D);
  sphere = new Sphere[nb];
  for (int i = 0; i < nb; i++) {
    sphere[i] = new Sphere(random(50, 500), random(50, 500));
  }
}

void draw() {
  background(0);
  for (int i = 0; i < nb; i++) {
    sphere[i].deplacement_sphere();
    sphere[i].dessine_sphere();
  }
}

class Sphere {
  PVector position;
  float deplacement_sphereX;
  float deplacement_sphereY;
  float radius;

  Sphere(float dx, float dy) {
    position = new PVector(dx, dy);
    deplacement_sphereX = 250 + 250 * cos(radius);
    deplacement_sphereY = 250 + 250 * sin (radius); 
    radius = radius + 0.025;
  }

  void deplacement_sphere() {
    position.x += deplacement_sphereX;
    position.y += deplacement_sphereY;
  }

  void dessine_sphere() {
    translate(position.x, position.y, 0); 
    fill(0, 255, 0);
    sphere(20);
  }
}

Hors ligne

 

#3 2013-10-05 05:33:01 Re : deplacement sphere

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

Re: deplacement sphere



je te remercie pour tes suggestions je vais allez voir à l'adresse que tu m'as donnée;mais il reste un problème dans ce programme, les morceaux   fonctionnent sèparèments mais lorsque je mets le programmes en entier rien ne se passe.Pourtant si je remplaces les sphères par des ellipses ça marche ,peut être cela pourrais  t'il venir de la fonction "translate"pourtant j'ai fais un programme avec une seule sphère cela fonctionne ,c'est pour ça que je n'y
comprend plus rien.

Remerciements pour toute l'aide que tu m'apporte.

Hors ligne

 

#4 2013-10-05 07:37:21 Re : deplacement sphere

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

Re: deplacement sphere



Salut,

Je m'attendais à ta question.
Il est important que tu comprennes comment fonctionne translate() et toutes les méthodes de transformation. En fait elles sont cumulatives. Donc si pour un objet tu utilises la méthode translate(), le suivant se déplcera de "son" translate() plus le précédent.

Il existe pour contrer cela deux méthodes pushMatrix() et popMatrix().
pushMatrix() sauvegarde dans une pile la matrice de transformation courante et popMatrix() sort le dernier élément entré dans la pile pour devenir la matrice de transformation courante.

void dessine_sphere() {
    pushMatrix();
    translate(position.x, position.y, 0); 
    fill(0, 255, 0);
    sphere(20);
    popMatrix();
  }

De plus, je pense qu'il y a un petit soucis dans l'initialisation des variables de la classe Sphere. Comme je ne sais pas ce que tu souhaites faire …

Hors ligne

 

#5 2013-10-05 12:40:03 Re : deplacement sphere

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

Re: deplacement sphere



En faits le but final du programme, est de simuler une tornade,mais comme je ne connais pas le langage JAVA j’écris juste des petits bouts pour comprendre et apprendre ce langage. Le bout de programme que je t'ais envoyez sert uniquement à faire tourner des sphères vu de dessus,mais normalement je dois rentrer des formules d’ellipse et celles ci doivent se regarder de cotées ;mais comme je trouves cela encore très compliquez, je me contente de faire des petits bouts, car les programmes que j'ai écris fonctionnent  bien avec une sphère mais j'essaye d'en mettre plusieurs bonjours les dégâts .Je te fais suivre un programme qui fonctionne ,mais il n'apparais qu'une sphère.

int n_planete=10;
Planete[]planete=new Planete[n_planete];

void setup()

  {
  size(700,700,P3D);
  for(int i=0;i<n_planete;i++)
  {
    planete[i]= new Planete(random(20,700),random(20,700));
  }
}



 

void draw()
{

  background(0);
for(int i=1;i<n_planete;i++)
{
  planete[i].bouger();
}
 
for(int i=1;i<n_planete;i++)
{
   
  planete[i].dessiner();
 

}

}

class  Planete{
  PVector position;
  PVector vitesse;
  float diametre;
float r;
Planete (float valx,float valy){
    position=new PVector(350,350);
   vitesse=new PVector(0.02,0.02);
   diametre=random(20,100);
  r=0.02;
}


void dessiner()
{
   
    fill(0,255,0);
  ellipse(position.x+350,position.y+350,diametre,diametre);
}

void bouger()
{
   
    r=r+0.02;
   
   position.x=350*cos(vitesse.x+r);
      position.y=350*sin(vitesse.x+r);
   
}
}

Hors ligne

 

#6 2013-10-05 15:16:00 Re : deplacement sphere

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

Re: deplacement sphere



Un petit truc pour poster dans le forum, pour le code il existe des balises spécifique que tu peux insérer en cliquant sur le bouton Code dans la fenêtre d'écriture du message.

Sinon, j'aurais fait un truc dans le genre :

final int n_planete = 10;
Planete[] planete;

void setup() {
  size(700, 700, P3D);
  planete = new Planete[n_planete];
  for (int i = 0; i < n_planete; i++) {
    planete[i] = new Planete(350, 350);
  }
}

void draw() {
  background(0);
  for (int i = 0; i < n_planete; i++) {
    planete[i].bouger();
  }
  for (int i = 0; i < n_planete; i++) {
    planete[i].dessiner();
  }
}

class  Planete {
  PVector positionCentre;
  float angle;
  float vitesseAngulaire;
  float diametre;
  float distance;

  Planete (float valx, float valy) {
    positionCentre = new PVector(valx, valy);
    angle = random(TWO_PI);
    vitesseAngulaire = random(PI / 40);
    diametre = random(10, 40);
    distance = random(100, 300);
  }

  void dessiner() {
    fill(0, 255, 0);
    pushMatrix();
    translate(positionCentre.x, positionCentre.y);
    ellipse(distance * cos(angle), distance * sin(angle), diametre, diametre);
    popMatrix();
  } 

  void bouger() {
    angle += vitesseAngulaire;
  }
}

Hors ligne

 

#7 2013-10-05 16:21:19 Re : deplacement sphere

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

Re: deplacement sphere



je te remercie il est super ton programme je vais bien étudier ce cas ,pour pouvoir mètre tous mes bouts ensembles
je te joints la partie qui tourne autour de l' axe Y et la partie spirale,donc, dans le programme que je veux écrire
les balles de la spirale doivent s’élever sur l'axe des Y, et tourner sur x autour de Y merci pour ton aide.
fabrice.
Par contre il y a un problème avec la version 2 de processing que j'ai chargez dernièrement,certains programmes ne fonctionnent pas ,et je ne peut plus mettre à jours le logiciel JAVA d'oracle.

Code (P5) :

float a = 0.0;
float x;
float y;

void setup() {
  size(640,320, P3D);
}
void draw() {  
  background(255);
  translate(640/2,320/2);
 a+=0.01;

 x=cos(a)+180;
 y=180*sin(PI);
   rotateX(2*PI);
  rotateY(a);
translate(x,y);  
 fill(255,0,255);
   sphere(20);
 }

partie spirale

Code (P5) :

float x;
float y;
float radius;
float angle;
int deg;



void setup()
{
  size(500, 500, P3D);
}


void draw()
{
  background(0);
  radius = 1.0;
  for (int deg = 0; deg < 360*6; deg +=4) {
    angle = radians(deg);
    x =250 + (cos(angle) * radius);
    y =250 + (sin(angle) * radius);
    pushMatrix();
    fill(0, 255, 0);
    translate(x, y);
    rotateZ(PI/2);
    sphere(10);
    radius = radius +0.4;
    popMatrix();
  }
}

Hors ligne

 

#8 2013-10-05 17:16:36 Re : deplacement sphere

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

Re: deplacement sphere



final int n_planete = 10;
Planete[] planete;

void setup() {
  size(700, 700, P3D);
  planete = new Planete[n_planete];
  for (int i = 0; i < n_planete; i++) {
    planete[i] = new Planete(350, height);
  }
}

void draw() {
  background(255);
  for (int i = 0; i < n_planete; i++) {
    planete[i].bouger();
  }
  for (int i = 0; i < n_planete; i++) {
    planete[i].dessiner();
  }
}

class  Planete {
  PVector positionCentre;
  float angle;
  float vitesseAngulaire;
  float hauteur;
  float vitesseY;
  float diametre;
  float distance;

  Planete (float valx, float valy) {
    positionCentre = new PVector(valx, valy);
    angle = random(TWO_PI);
    vitesseAngulaire = random(PI / 40);
    hauteur = 0;
    vitesseY = random(1);
    diametre = random(10, 40);
    distance = random(100, 300);
  }

  void dessiner() {
    fill(0, 255, 0);
    pushMatrix();
    translate(positionCentre.x + distance * cos(angle), positionCentre.y + hauteur, distance * sin(angle));
    sphere(20);
    popMatrix();
  } 

  void bouger() {
    angle += vitesseAngulaire;
    hauteur -= vitesseY;
  }
}

Hors ligne

 

#9 2013-10-06 07:35:11 Re : deplacement sphere

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

Re: deplacement sphere



bonjour.

Bien reçu ton programme, c'est très clair la programmation objets ça a l'air super ,je comprend un petit peu,ce qu il faut mettre dans la class ,mais je ne comprend pas trop la ligne du constructeur "float un nom et x,float un nom y"je ne vois pas trop à quoi sert cette ligne et ce qu'il faut mettre dedans;mais à part ça pour le reste c'est bon.Je vais essayer d'utiliser ton programme pour calculer maintenant le nombres de sphères qu'il faut par tour de 360° par rapport à l'augmentation du diamètre.
Milles mercis pour ton aide  .

fabrice.

Hors ligne

 

#10 2013-10-07 19:22:32 Re : deplacement sphere

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

Re: deplacement sphere



Bonjour,

Pour le constructeur, il s'agit d'initialiser les différentes variables de l'instance.
Imaginons une classe Boule :

class Boule {
  PVector position;
  float vitesse;

  void affichage() {
    ellipse(position.x, position.y, 10, 10);
  }
}

Il va falloir initialiser les variables position et vitesse.
Si la position initiale n'a pas d'importance, nous pouvons écrire le constructeur suivant :

  Boule() {
    position = new PVector(random(width), random(height));
    vitesse = random(0.5, 2);
  }

Et le code pour faire fonctionner la classe :

Boule[] boules;

void setup() {
  size(400, 400);
  boules = new Boule[20];
  for (int i = 0; i < boules.length; i++) {
    boules[i] = new Boule();
  }
}

void draw() {
  background(255);
  for (int i = 0; i < boules.length; i++) {
    boules[i].affichage();
  }
}

Par contre si nous souhaitons organiser les boules, leurs donner une position précise à l'initialisation nous pouvons écrire le constructeur suivant :

  Boule(float x, float y) {
    position = new PVector(x, y);
    vitesse = random(0.5, 2);
  }

Et la ligne à remplacer dans le setup()

    boules[i] = new Boule(width / 2 + 100 * cos(TWO_PI * i / boules.length), height / 2 + 100 * sin(TWO_PI * i / boules.length));

Mais comme une classe est appelée à être utile dans d'autre programme, il est possible d'écrire les deux constructeurs précédents dans la définition de la classe et le programme utilisera le bon en fonction des arguments que tu passeras dans l'instanciation de ta classe.

Boule[] boules;

void setup() {
  size(400, 400);
  boules = new Boule[20];
  for (int i = 0; i < boules.length; i++) {
    //boules[i] = new Boule();
    boules[i] = new Boule(width / 2 + 100 * cos(TWO_PI * i / boules.length), height / 2 + 100 * sin(TWO_PI * i / boules.length));
  }
}

void draw() {
  background(255);
  for (int i = 0; i < boules.length; i++) {
    boules[i].affichage();
  }
}

class Boule {
  PVector position;
  float vitesse;

  Boule(float x, float y) {
    position = new PVector(x, y);
    vitesse = random(0.5, 2);
  }

  Boule() {
    position = new PVector(random(width), random(height));
    vitesse = random(0.5, 2);
  }

  void affichage() {
    ellipse(position.x, position.y, 10, 10);
  }
}

Pour être pédant, on parle de surcharge du constructeur.

Dernière modification par Mushussu (2013-10-07 19:28:12)

Hors ligne

 

#11 2013-10-08 05:28:17 Re : deplacement sphere

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

Re: deplacement sphere



bonjour

Mes programmes ne fonctionnaient pas par-ce-que je pensais que la class faisait parti du draw et que les sub-routines void dessine () "par exemple"étaient indépendantes,et c'est pour ça qu'il y avais les problèmes avec les accolades ce qui me générais tous un tas de problèmes .En tous cas cet exercice m'a permis d'apprendre les class,les vector,et la fonction push pop et translate .Je te remercie encore pour ta gentillesse et pour tous les programmes que tu m'as envoyer .
remerciements.
Fabrice

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024