» codelab : http://codelab.fr/accueil » Forum : Processing : http://codelab.fr/processing » dessin qui s'affichent aléatoirement : http://codelab.fr/4106 Ceci est la version imprimable d'un sujet du forum, pour retourner à la version complète : dessin qui s'affichent aléatoirement |
nahkira — 2013-03-03 18:19:29 |
Salut à tous |
cgiles — 2013-03-04 13:22:28 |
tu peux commencer par utiliser un tableau en deux dimension, c'est le plus simple pour représenter une image. int[][] grille = { {0, 1, 1, 0}, {1, 0, 0, 1}, {1, 0, 0, 1}, {0, 1, 1, 0} }; int i=0; void setup(){ size(400,400); frameRate(2); } void draw(){ for(int j=0;j<4;j++){ if(grille[i][j]==0){ fill(0); grille[i][j]=1; }else{ fill(255); grille[i][j]=0; } noStroke(); rect(j*100,i*100,100,100); } if(i<3){ i++; }else{ i=0; } } |
nahkira — 2013-03-04 21:34:02 |
Merci pour la réponse float a = 0; float b = 0; float rond01 = 0; // variable pour le balayage void setup(){ size(200,200); background(0); int cols = width; int rows = height; // Declare 2D array int[][] myArray = new int[75][75]; // Initialize 2D array values for (int i = 0; i < 75; i = i +1) { for (int j = 0; j < 75; j = j + 1) { myArray[i][j] = int(0); } } // Draw points for (int i = 0; i < 75; i = i +1) { for (int j = 0; j < 75; j = j + 1) { stroke(myArray[i][j]); fill(200); rect(i * 4 , j * 4, 5, 5); } } } // Close setup void draw(){ rond01(); } void rond01(){ stroke(200); noFill(); //rect(a, b, random(5), random(4)); //stroke(200); noFill(); stroke(200); ellipse(a, b, random(4), random(5)); a = a + 3; if(a > width){ a = 0; b = random(200); } } je souhaite que quand le balayage que j'appelle rond01 passe sur un carré qui correspond à une coordonnée |
BlackTree — 2013-03-04 22:28:55 |
J'ai pas bien compris se que tu faisais avec ton ellipse :/, mais voilà le code où tout se change au bon endroit. Je te laisse faire la suite. float a = 0; float b = 0; float rond01 = 0; // variable pour le balayage void setup(){ size(200,200); background(0); int cols = width; int rows = height; // Declare 2D array int[][] myArray = new int[75][75]; // Initialize 2D array values for (int i = 0; i < 75; i = i +1) { for (int j = 0; j < 75; j = j + 1) { myArray[i][j] = int(0); } } // Draw points for (int i = 0; i < 75; i = i +1) { for (int j = 0; j < 75; j = j + 1) { stroke(myArray[i][j]); fill(200); rect(i * 4 , j * 4, 5, 5); } } } // Close setup void draw(){ rond01(); } void rond01(){ stroke(200); fill(0); rect(a*4, b*4, 4, 4); stroke(200); noFill(); a = a + 1; if(a > 50){ a = 0; b = int(random(0,50)); } } Et pour une coloration aléatoire (je n'ai ici pas mis de stroke blanc pour les carrés noirs dans un souci esthétique, mais libre à toi d'en mettre un très facilement dans la condition que j'ai mise). Si tu veux faire de "vrais" dessins, il va falloir que tu fasses un tableau en deux dimension ou chaque coordonné correspond à une valeur "noirOuBlanc" égale à 0 ou 1. Bref : float a = 0; float b = 0; float rond01 = 0; // variable pour le balayage int noirOuBlanc; void setup(){ size(200,200); background(0); int cols = width; int rows = height; // Declare 2D array int[][] myArray = new int[50][50]; // Initialize 2D array values for (int i = 0; i < 50; i = i +1) { for (int j = 0; j < 50; j = j + 1) { myArray[i][j] = int(0); } } // Draw points for (int i = 0; i < 50; i = i +1) { for (int j = 0; j < 50; j = j + 1) { stroke(myArray[i][j]); fill(200); rect(i * 4 , j * 4, 5, 5); } } } // Close setup void draw(){ rond01(); } void rond01(){ stroke(0); noirOuBlanc = int(random(0,2)); if(noirOuBlanc==0){ fill(0); }else{ fill(225); } rect(a*4, b*4, 4, 4); stroke(200); noFill(); a = a + 1; if(a > 50){ a = 0; b = int(random(0,50)); } } Je sais pas si c'est une très bonne idée de te donner le code tout fait si tu veux apprendre, mais ton projet est sympa, donc j'ai craqué... Essaye de bien le méditer, voir même de le refaire tout seul :) |
nahkira — 2013-03-04 23:29:34 |
Merci pour ton aide |
BlackTree — 2013-03-04 23:44:59 |
Pour pousser le concept plus loin : chaque ligne ne se change qu'une fois par dessin (pas de doublons), de cette manière tu pourras même faire faire ce que tu veux au programme quand le dessin sera terminé. (C'est faisable avec un tableau uni-dimensionnel et un peu d'astuce pour le random) |
nahkira — 2013-03-05 00:39:40 |
Tu veut dire que chaque ligne ne passerai qu'une seule fois (dans la distribution verticale) et faire faire |
BlackTree — 2013-03-05 01:37:30 |
T'as tout compris :) |
BlackTree — 2013-03-12 22:35:33 |
Pardon pour le gros up, mais après avoir codé ça je me devais de te partager mon idée. lien vers la page de la vidéo sur youtube Voilà, le principe serait de reprendre ton concept d'afficher un dessin en pixel art, mais ici en 3d :) (un peu à la picross 3d), pas grand chose ne change, si se n'est le fait d'utiliser un tableau en 3 dimensions et les fonction pushMatrix() et popMatrix() pour ne pas avoir de problèmes avec les translate(), obligatoires en P3D. Comme j'ai cru comprendre que tu débutais plus que moi, je te file mon code source pour snake, tu pourras t'en servir comme base. Oui c'est un peu codé avec les pieds et y'a pas mal d'optimisations possibles, mais passons... |
nahkira — 2013-03-21 00:21:16 |
Superbe |
BlackTree — 2013-03-21 18:21:21 |
Etant lycéen j'ai la chance d'avoir du temps libre pour apprendre, je suis pas si méritant... |