我使用绘制圆圈的处理创建了一个循环,整体形状应该是圆形。然而,它们主要靠近X和Y轴绘制。我已将其位置的微积分随机化,我无法看出问题所在。
代码如下:
for (int omega = 0; omega<1080; omega++){ //loop for circle creation
radius = (int)random(80); //random radius for each circle
int color1= (int)random(100); //little variation of color for each circle
int color2= (int)random(100);
int locationY = (int)(sin(radians(omega))*random(width/2+1)); //location calcualtion
int locationX = (int)(cos(radians(omega))*random(width/2+1));
fill(0,color1+200,color2+200,50);
ellipse(locationX,locationY,radius,radius); //draw circles
}
答案 0 :(得分:5)
它是计算位置的方式的假象,你为X和Y分量拉两个不同的随机值:
int locationY = (int)(sin(radians(omega))*random(width/2+1)); //location calcualtion
int locationX = (int)(cos(radians(omega))*random(width/2+1));
对于X和Y,您应该使用距离中心的一个随机值“距离”,这将移除朝向轴的聚类。
答案 1 :(得分:5)
好点@Durandal(+1)
然而,我还有一个随机圈子的想法。
使用此类代码生成随机距离时:
double distance = random( width/2 );
您是从统一分发随机的。我的意思是从0
到width/2
的所有值都具有相同的概率。但是,半径为3*r
的圆圈的面积会增加9
倍,然后以r
半径圆圈。因此,距离中心的距离越小,我们就能看到越大的密度。
这样生成的云 没有统一的密度,就像您在第一张图片上看到的那样。
但是如果你改变概率密度函数,那么较大的值不太可能是较小的值,你可以统一生成云。
这样简单的修改:
double distance = Math.sqrt( random( width/2 * width/2 ) );
生成更均匀分布的圆,正如您在第二张图像上看到的那样。
我希望这会有所帮助..