Annonce

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


#1 2014-02-18 12:54:02 ArrayList de PVectors, gestion mémoire ?

Naokao
nouveau membre
Date d'inscription: 2014-02-11
Messages: 4

ArrayList de PVectors, gestion mémoire ?



Ola communauté du codelab !

Une question assez simple je pense, relevant plus d'une incompréhension de la gestion mémoire en java :

Je souhaite créer un tableau de coordonnées pour mes points, seulement lors du dessin, ceux ci ont tous les mêmes coordonnées : celles du dernier passage de ma boucle d'initialisation
J'en déduis que chaque nouveau vecteur créé remplace ceux déjà présent dans mon tableau ?
Comment feriez vous à ma place pour initialiser et manipuler ce tableau ?
Merci d'avance


ArrayList<PVector> line = new ArrayList<PVector>();
int lineSize = 120;
int scale = 100;

void setup() {

  size(640, 360);

  // Create a line
  for (int i= 0; i< lineSize; i++) {

    PVector v1 = new PVector();    
    v1.x = - scale/2 + (i/lineSize*scale);
    v1.y = 0; 
    
    line.add(v1); 

  }
}

void draw() {
  
  background(50);
  translate(width/2, height/2);
  strokeWeight(4);
  
  beginShape();
  noFill();
  stroke(255);
  
  for (PVector v : line) {
    vertex(v.x, v.y);
    print("coord : "+ v.x +" "+ v.y);
  }
  endShape(CLOSE);

}

Hors ligne

 

#2 2014-02-18 13:56:19 Re : ArrayList de PVectors, gestion mémoire ?

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

Re: ArrayList de PVectors, gestion mémoire ?



Est-ce que cela te convient :

ArrayList<PVector> line;
int lineSize = 120;
int scale = 100;

void setup() {

  size(640, 360);
  line = new ArrayList<PVector>();
  // Create a line
  for (int i = 0; i < lineSize; i++) {
    PVector v1 = new PVector(- scale/2 + ((i * scale)/lineSize), 0); 
    line.add(v1);
  }
  noLoop();
}

void draw() {

  background(50);
  translate(width/2, height/2);
  strokeWeight(4);

  beginShape();
  noFill();
  stroke(255);

  for (PVector v : line) {
    vertex(v.x, v.y);
    println("coord : "+ v.x +" "+ v.y);
  }
  endShape(CLOSE);
}

Hors ligne

 

#3 2014-02-18 14:47:53 Re : ArrayList de PVectors, gestion mémoire ?

Naokao
nouveau membre
Date d'inscription: 2014-02-11
Messages: 4

Re: ArrayList de PVectors, gestion mémoire ?



Et bien oui merci écoute ça marche parfaitement, le problème était donc tout autre et je dois me rendre à l'évidence :

(i * j / k)  est donc différent de (i / k * j)

Dois-je revoir les bases de l'arithmétique ou cette règle dépasse l'entendement ???

Hors ligne

 

#4 2014-02-18 19:03:07 Re : ArrayList de PVectors, gestion mémoire ?

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

Re: ArrayList de PVectors, gestion mémoire ?



Pour être certain utilise des parenthèses pour clarifier tes calculs.

Hors ligne

 

#5 2014-02-18 20:17:44 Re : ArrayList de PVectors, gestion mémoire ?

chrisjo
membre
Date d'inscription: 2012-12-26
Messages: 22

Re: ArrayList de PVectors, gestion mémoire ?



Est-ce que le problème ne serait pas de diviser un nombre "int" pour espérer obtenir un nombre "float" <1?
Par exemple calculer  1/100 donne 0 tandis que 1.0/100 donne 0.01.
Donc ici en multipliant d'abord par la valeur scale on évite en réalité ce problème mais pas la question de savoir si on calcule en "int" ou en "float" ??

Hors ligne

 

#6 2014-02-18 20:27:08 Re : ArrayList de PVectors, gestion mémoire ?

top
membre
Date d'inscription: 2012-04-12
Messages: 43

Re: ArrayList de PVectors, gestion mémoire ?



En effet il y a bien une différence entre I * j / k et i / k * j ce n'est pas une question de parenthèse mais il y a 2 raisons à cela:

1°) si tu utilises des entiers quand tu fais i / k Java effectue la division entière, c'est à dire que la division
     renvoie la partie entière exemple : 3 / 4 = 0 donc si :  i = 3, j = 3 et k = 4
     i * j / k = 2
     i / k * j = 0

2°) Le calcul flottant crée parfois des situations surprenantes par exemple (a * b) * c différent de a * (b * c)
      À tester par exemple avec a = 3.1 ; b = 2.3 et c = 1.5
      Il ne faut pas oublier qu’un ordinateur ne stocke pas les nombres en base 10 mais en base 2. Or les nombres utilisés
      dans les calculs ont pour certains une écriture décimale finie mais une écriture binaire illimitée.
      1.1(10) = 01.0001100110011001100110011...(2)
A mediter

Dernière modification par top (2014-02-18 20:28:40)

Hors ligne

 

#7 2014-02-18 23:54:24 Re : ArrayList de PVectors, gestion mémoire ?

Naokao
nouveau membre
Date d'inscription: 2014-02-11
Messages: 4

Re: ArrayList de PVectors, gestion mémoire ?



Merci à tous pour vos réponses détaillées ......... concernant la tienne top j'apprend quelque chose !
Je me remet doucement au code et j'ai besoin de reprendre l'habitude avec ces automatismes
wink

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024