主要在X和Y轴上绘制圆形,为什么?

5

在此输入图片描述

我使用Processing创建了一个循环,画出了圆圈,整体形状应该是一个圆。然而,它们主要靠近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
    }

你使用哪种随机实现?内置的通常容易产生聚类值。尝试使用另一个种子或尝试另一种随机实现。有几个真正好的选择。尝试搜索Mersenne Twister,它是一个真正好的选择,并且你可以找到很多Java实现。 - Ryu Kajiya
“close to X and Y axis” 是什么意思?你能提供一张截图吗?请将其上传到imgur。 - Kevin
2个回答

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));

您应该使用一个随机值“distance”来代替X和Y的中心点,这样可以减少在坐标轴上的聚集。


5

很好的观点 @Durandal (+1)

然而,我对于随机圆形还有一个想法。

当您使用以下代码生成随机距离时:

double distance = random( width/2  );

您从均匀分布中随机选择。我的意思是从0width/2的所有值都具有相同的概率。但是,半径为3*r的圆的面积比半径为r的圆大9倍。因此,距离中心较近的位置我们能看到更密集的点。
如此生成的云朵的密度并不均匀,您可以在第一幅图像中看到。 enter image description here 但是,如果按照更小的值更可能发生的方式改变概率密度函数,则可以得到均匀生成的云。
这种简单的修改:
double distance = Math.sqrt( random( width/2 * width/2 ) );

通过第二张图片,可以更清楚地看到生成的圆是更加均匀分布的。

enter image description here

希望这对您有所帮助。


好观点,并且图片演示得非常好 +1 - Durandal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接