円と正方形を描画する

同じ画像内に円と正方形を重ならない条件で描画したい

以前も同じ質問をさせていただき、何日かかけながら自分なりに解決してみました。
しかし、画像内の円と正方形が重なってしまうという問題だけが解決しないです。

該当のソースコード

ArrayList<PVector> circles; void setup() { size(512, 512); smooth(); frameRate(100); } void draw() { background(255); circles = new ArrayList<PVector>(); int f= int(random(75,100)); int e =int(random(0,50)); int a =int(random(0,e)); int b =int(random(0,e-a)); int d = e-a-b; int[] sizes ={ }; for(int i = 0; i < a; i++){ sizes = (int[])append(sizes,int(random(18,26))); } for(int i = 0; i < b; i++){ sizes = (int[])append(sizes,int(random(1,18))); } for(int i = 0; i < d; i++){ sizes = (int[])append(sizes,int(random(26,31))); } while (circles.size() < sizes.length) { int diameter = sizes[circles.size()]; PVector c = new PVector(random(20,462), random(20,462), diameter); boolean overlapping = false; for (PVector p : circles) { if (dist(c.x, c.y, p.x, p.y) < (c.z + p.z)*2 / 1.9) { overlapping = true; break; } } if (!overlapping) { circles.add(c); } } for ( int i = 0; i < circles.size(); i++) { PVector p = circles.get(i); noStroke(); fill(0); ellipse(p.x, p.y, p.z, p.z); } ArrayList<PVector> rects = new ArrayList<PVector>(); int e2 =f-e; int a2 =int(random(0,e2)); int b2 =int(random(0,e2-a2)); int d2 = e2-a2-b2; int a3 = a+a2; int b3 = b+b2; int d3 = d+d2; ; int[] sizes2 ={ }; for(int i = 0; i < a2; i++){ sizes2 = (int[])append(sizes2,int(random(18,26))); } for(int i = 0; i < b2; i++){ sizes2 = (int[])append(sizes2,int(random(1,18))); } for(int i = 0; i < d2; i++){ sizes2 = (int[])append(sizes2,int(random(26,31))); } while (rects.size() < sizes2.length) { int size = sizes2[rects.size()]; PVector c = new PVector(random(20, 492), random(20, 492), size); boolean overlapping = false; for (PVector p : rects) { if (dist(c.x, c.y, p.x, p.y) < (c.z + p.z) * 1.3 / 2) { overlapping = true; break; } } if (!overlapping) { rects.add(c); } } for (PVector p : rects) { pushMatrix(); translate(p.x, p.y); rotate(random(0, HALF_PI)); rect(0, 0, p.z, p.z); popMatrix(); } // 画像の保存 save("C:/tamesi/" + frameCount + "s" + b3 + "m" + a3 + "l" + d3 +".png"); if (frameCount == 10) { noLoop(); } }

解決策があればご教示いただきたいです。

コメントを投稿

0 コメント