現状
現在processingで3種類の大きさの四角形を合計100個、画像内にランダムに配置できるようにコードを作成しました。
processing
1 2 3ArrayList<PVector> rect; // 正方形のデータ 4 5void setup() { 6 size(512, 512); 7 smooth(); 8 9 frameRate(20); // 1秒当たり描画数 10 11} 12 13void draw() { 14 15 background(255); 16 rect = new ArrayList<PVector>(); // 17 18 //データ 19 20 int a =int(random(0,100)); 21 int b =int(random(0,100-a)); 22 int d = 100-a-b; 23 24 int[] sizes ={ 25 26 27 }; 28for(int i = 0; i < a; i++){ 29 sizes = (int[])append(sizes,int(random(10,20))); 30} 31 32for(int i = 0; i < b; i++){ 33 sizes = (int[])append(sizes,int(random(1,10))); 34} 35 36for(int i = 0; i < d; i++){ 37 sizes = (int[])append(sizes,int(random(20,39))); 38} 39 40 while (rect.size() < sizes.length) { 41 int diameter = sizes[rect.size()]; 42 43 44 PVector c = new PVector(random(20,492), random(20,492), diameter); 45 boolean overlapping = false; 46 47 for (PVector p : rect) { 48 49 if (dist(c.x, c.y, p.x, p.y) < (c.z + p.z)*1.41/ 2) { 50 overlapping = true; 51 break; 52 } 53 } 54 55 if (!overlapping) { 56 rect.add(c); 57 58 } 59 } 60 61 62 // 正方形の描画 63 for ( 64 65 int i = 0; i < rect.size(); i++) { 66 PVector p = rect.get(i); 67 noStroke(); 68 fill(0); 69 rectMode(CENTER); 70 rect(p.x, p.y, p.z, p.z); 71 72 } 73 74 75 // 画像の保存 76 77 78 79 save("C:/gazou/" + frameCount + "s" + b + "m" + a + "l" + d +".png"); 80 81 if (frameCount == 50) { // n枚作ったら止める 82 noLoop(); // 止める 83 84 //launch("start " + sketchPath()); // Windows専用 エクスプローラでフォルダを開く 85 //exit(); // 終了 86 } 87}
問題点
このコードでは正方形の傾きは無いため、ランダムに正方形を回転できるようなコードを書きたいと考えました。
そこで、正方形の描画のところを変更し
for ( int i = 0; i < rect.size(); i++) { PVector p = rect.get(i); noStroke(); fill(0); translate(p.x, p.y); rotate (random(0,89)) ; rectMode(CENTER); rect(p.x, p.y, p.z, p.z); }
としたのですが、正方形が数個しか画像に映らず、うまく描画できませんでした。
translateの値を変更したり、文を追加したりしたのですが改良できませんでした。
// 正方形の描画 for ( int i = 0; i < rect.size(); i++) { PVector p = rect.get(i); noStroke(); fill(0); translate(256, 256); rotate (random(0,89)) ; rectMode(CENTER); rect(p.x, p.y, p.z, p.z); }
// 正方形の描画 for ( int i = 0; i < rect.size(); i++) { PVector p = rect.get(i); noStroke(); fill(0); pushMatrix () ; translate(p.x, p.y); rotate (random(0,89)) ; rectMode(CENTER); rect(p.x, p.y, p.z, p.z); popMatrix () ; }
うまく正方形を回転させ、100個すべての正方形を画像内に描画するにはどうしたらいいでしょうか?
アドバイスお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/12 05:05