Pages: 1
Bonjour à tous,
nouveau membre (mais lecteur de ce forum depuis quelques mois déjà…), donc une petite présentation préalable :
bon, voilà je bidouille (dans mon cas, pure autodidacte en codage, cela reste, à ce jour, de la bidouille…) processing depuis 2 mois environ, essentiellement dans l'optique d'essayer de coder des bandes-dessinées (oui…) et en particulier pour y exploiter l'aléatoire, le hasard.
Bon bref, me voilà avec un petit souci de code (probablement très bête…) que je ne vois pas comment résoudre correctement :
for (int i = 0; i < 80; i +=10) { int y = 80 + round(random(-i,i)); if (y > 130) { y = 80 + round(random (-i, + i)); } line (i,y,i+5,y); }
Les lignes doivent impérativement se trouver dans un rectangle de 130 pixels de haut — c'est pour cela que j'ai rajouté
if (y> 130) { y = 80 + round(random(-i, i)); }
au cas où y > 130 et que les lignes dessinées se retrouvent en dehors du rectangle et afin de les replacer dans le rectangle (une case en fait). Mais cela ne marche pas apparemment…
Donc si l'un d'entre vous a idée du comment résoudre ce petit bug, je suis tout ouïe ; et ce serait fort gentil de sa part !
ps : je ne sais pas si le titre du sujet est clair ou pas…
Hors ligne
Salut,
je ne sais pas si j'ai bien compris ce que tu attendais mais voici une proposition :
int x = 25, y = 25, w = 50, h = 50; rect(x, y, w, h); for (int i=x; i<w+x; i +=10) { for (int j=y; j<h+y; j +=10) { int choix = int(random(10)); if (choix<5) { line (i, j, i+5, j); } } }
puisse t-elle t'aider
Dernière modification par oyster_twiter (2012-08-31 11:34:24)
Hors ligne
Pour manipuler des rectangles, je te recommande la classe Rectangle de java :
http://docs.oracle.com/javase/1.4.2/doc … angle.html
Tu défini un rectangle, ensuite tu peux le dessiner, tester si un point est dedans ou non,ect...
Hors ligne
THE EASY WAY: mets "while" à la place de ton "if"
ça permet de vérifier la condition jusqu'à ce qu'elle soit fausse
Hors ligne
@oyster_twiter : merci mais malheureusement ce n'est pas vraiment ce que je cherche à faire — la position y de mes traits doit être définit aléatoirement par rapport à la position x de ceux-ci, donc à i —.
Mais j'ai finalement contourné le problème "à la main" en écartant ceux où les traits sortaient des cases (le but était de constituer un pdf qui réunissait un certain nombre de ces strips générés aléatoirement).
@cgiles : merci, je regarderai ça à l'occasion. Je suppose que c'est quelque chose à importer sous forme de library dans processing ?
@Maklo135 : merci, je vais tester ça.
Hors ligne
Makio135 a écrit:
THE EASY WAY: mets "while" à la place de ton "if"
ça permet de vérifier la condition jusqu'à ce qu'elle soit fausse
Je dois merder qq part mais ça l'air de buguer/ ramer pas mal avec cette méthode :
for (int i = 0 ; i < 80 ; i += 10) { int y = 80 + round(random(-i, i)); while (y< 130) { y = 80 + round(random(-i, i); } line (i, y, i +5, y); }
Il y a un truc qui cloche ?
Hors ligne
while(y>130)
tu as changé le signe par rapport à ton premier code...
Dernière modification par Makio135 (2012-09-01 10:48:19)
Hors ligne
Pour la classe rectangle elle fait partie de java, donc pas besoin d'importer de librairie.
En faite Processing est une librairie Java, donc en plus de java. Ce qui fait que l'on bénéficie de toutes les fonctions Java
Hors ligne
@Makio135 : oui, un acte irréfléchi de ma part Merci.
@cgiles : cool, merci.
Pour "l'importer", je tape donc :
rectangle rectangle1 = new rectangle ();
, et rien d'autre ?
edit : @Makio135 : cela a l'air de fonctionner comme il faut
Dernière modification par mfm (2012-09-01 12:02:11)
Hors ligne
Quant à la classe Rectangle il faut bien l'importer même si c'est du Java (heureusement que Processing ne charge pas toutes les classes Java d'ailleurs).
Voici un petit exemple de son utilisation qui vérifie si la souris est dans un Objet Rectangle grâce à la méthode contains() de cette classe:
import java.awt.Rectangle; Rectangle r; void setup() { size(200, 200); r = new Rectangle(50, 50, 100, 100); } void draw() { background(0); rect(r.x, r.y, r.width, r.height);//afficher notre Rectangle r println(r.contains(mouseX, mouseY)); }
Dernière modification par Makio135 (2012-09-01 12:31:40)
Hors ligne
Ok, merci pour la précision Makio
Et si on ajoute une fonction du type :
void rect(Rectangle r){ rect(r.x, r.y, r.width, r.height); }
on obtient ça :
import java.awt.Rectangle; Rectangle r; void setup() { size(200, 200); r = new Rectangle(50, 50, 100, 100); } void draw() { background(0); rect(r);//afficher notre Rectangle r println(r.contains(mouseX, mouseY)); } void rect(Rectangle r){ rect(r.x, r.y, r.width, r.height); }
Ce qui peut simplifier pas mal si tu as beaucoup de Rectangle
Hors ligne
Super ! Un grand merci à vous deux !
Hors ligne
Pages: 1