Iai*_*ain 2 random geometry 2d
假设您有一个 2D 区域,并且想要在其中生成随机点,通过设置
x = random() * width
y = random() * height
Run Code Online (Sandbox Code Playgroud)
点是否聚集在该区域的中心周围?我记得读过一些东西说他们会,但我不太明白为什么,以及如何防止它。
是的。您拥有的点越少,它们形成的集群就越多。
为避免这种情况,您可以使用“分层抽样”。它基本上意味着您将表面均匀地划分为较小的区域并将您的点放在那里。
对于您的示例,您可以将正方形分成 n*n 个子正方形。每个点将随机放置在它的子方格内。您甚至可以调整随机性因子,使模式或多或少是随机/规则的:
// I assume random() return a number in the range [0, 1).
float randomnessFactor = 0.5;
int n = 100;
for(int ySub=0; ySub<n; ++ySub){
for(int xSub=0; xSub<n; ++xSub){
float regularity = 0.5 * (1-randomnessFactor);
x = regularity + randomnessFactor * random() + xSub / (float) (n-1);
y = regularity + randomnessFactor * random() + ySub / (float) (n-1);
plot(x, y);
}
}
Run Code Online (Sandbox Code Playgroud)
这样做的原因是您实际上并不想要随机性。(团块是随机的。)您希望点均匀分布,但没有规则模式。将点放在网格上并稍微偏移它们会隐藏规律性。