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
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
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
Pour être certain utilise des parenthèses pour clarifier tes calculs.
Hors ligne
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
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
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
Hors ligne
Pages: 1