processingを使用して正三角形の描画を行いたいです
私は現在processingを使用して複数の正三角形を描画した画像を作りたいです。
3種類(110、1525、30~40)の大きさの正三角(正確には正三角形の大きさではないですが)を角度を変えながら描画しています。三角形の個数はすべて合わせて50個としています。
###重ならないように描画
ただ描画するだけならコードが書けたのですが、正三角形同士が重なってしまいます。
そこで、正三角形同士が重ならないようにしたいです。
該当のソースコード
processing
1 2 3ArrayList<PVector> circles; 4 5void setup() { 6 size(512, 512); 7 smooth(); 8 9 frameRate(20); 10 11} 12 13void draw() { 14 15 background(255); 16 int a=int(random(1,50)); 17 int b=int(random(1,50-a)); 18 int c=50-a-b; 19 20 21 for (int n = 0; n < a; n++) { 22 int R = int(random(1,10)); 23 24 25 26 strokeWeight(1); 27 stroke(0, 0, 0); 28 fill(0); 29 pushMatrix(); 30 translate(int(random(15,490)),int(random(15,490))); 31 rotate(radians(int(random(0,90)))); 32 beginShape(); 33 for (int i = 0; i < 3; i++) { 34 vertex(R*cos(radians(360*i/3)), R*sin(radians(360*i/3))); 35 } 36 endShape(CLOSE); 37 38 popMatrix(); 39 } 40 41 for (int n = 0; n < b; n++) { 42 int R = int(random(15,25)); 43 44 45 46 strokeWeight(1); 47 stroke(0, 0, 0); 48 fill(0); 49 pushMatrix(); 50 translate(int(random(15,490)),int(random(15,490))); 51 rotate(radians(int(random(0,90)))); 52 beginShape(); 53 for (int i = 0; i < 3; i++) { 54 vertex(R*cos(radians(360*i/3)), R*sin(radians(360*i/3))); 55 } 56 endShape(CLOSE); 57 58 popMatrix(); 59 } 60 61 for (int n = 0; n < c; n++) { 62 int R = int(random(30,40)); 63 64 65 66 strokeWeight(1); 67 stroke(0, 0, 0); 68 fill(0); 69 pushMatrix(); 70 translate(int(random(15,490)),int(random(15,490))); 71 rotate(radians(int(random(0,90)))); 72 beginShape(); 73 for (int i = 0; i < 3; i++) { 74 vertex(R*cos(radians(360*i/3)), R*sin(radians(360*i/3))); 75 } 76 endShape(CLOSE); 77 78 popMatrix(); 79 80 81 82 save("F:/otamesi/data/" + frameCount +"s" + a + "m" + b +"l" + c + ".png"); 83 84 if (frameCount == 10) { // 85 noLoop(); // 86 87 88 } 89} 90}
これまで、調べたりteratailで回答して頂いたりして、円や正方形の描画は重ならないコードが書けていたのですがその際に利用していた部分を使用しても変数の数などが違う為うまくいきませんでした。
円や正方形の時の重ならないためのコードは以下です。
processing
1 while (circles.size() < sizes.length) { 2 int diameter = sizes[circles.size()]; 3 4 5 PVector c = new PVector(random(20,492), random(20,492), diameter); 6 boolean overlapping = false; 7 8 for (PVector p : circles) { 9 10 if (dist(c.x, c.y, p.x, p.y) < (c.z + p.z) / 1.9) { 11 overlapping = true; 12 break; 13 } 14 } 15 16 if (!overlapping) { 17 circles.add(c); 18 19 } 20 } 21 22 for ( 23 24 int i = 0; i < circles.size(); i++) { 25 PVector p = circles.get(i); 26 noStroke(); 27 fill(0); 28 ellipse(p.x, p.y, p.z, p.z); 29 30 }
正三角形でも重なることなく描画する方法をご教授頂けると幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/24 06:11