在提供的Vector2的半径上返回随机点的方法,在半径中心的几率比边缘高。

问题描述 投票:0回答:1

我需要一种方法,在这种方法中,我可以提供一个Vector2的位置和一个半径,这将给我一个随机的点在半径中,有更高的机会向中心比半径的边缘。

我曾试着搜索这个问题的解决方案,但一直无法在searchengines中很好地描述这个问题,无法得出一个好的结果。

希望这里有人能给我指出正确的方向。如果有任何语言的代码例子,我们将非常感激

math game-engine game-physics physics
1个回答
2
投票

不如这样吧。

  1. 在[-R,R]范围内产生三个均匀分布的随机数. 你得到的是(x,y,z),它描述了在一个立方体中随机抽取的一个点(均匀分布)。
  2. 如果x2+y2+z2 > R2拒绝该点,并从第一步开始。(你生成的点有一半以上会通过这个测试。)
  3. 现在你得到的是一个在半径为R的球体内部随机绘制的点(均匀分布)。
  4. 现在抛弃z,你剩下的是(x,y),它描述的是在中心半径R内的一个点,由于球体的中间比边缘厚,所以更有可能靠近中心而不是更远。

1
投票

不知道这是否正是你想要的,但它应该给你一些分布,球体中心的每一体积有更多的点。

你可以用这个简单的公式 在球体表面找到一个随机均匀分布的点。生成一个随机分布在单位球体表面的点的样本:

当你把这个点与一个随机值相乘并除以r后向内移动。

(x,y,z) *= randomValue

其中(x,y,z)是指向表面上随机点的向量 randomValue是0到1之间的随机值。

这给出了一个相对于r的均匀分布,但由于表面的半径越小,你的点会集中在中间。

如果你想进一步调整分布,你可以给randomValue添加一些幂。

(x,y,z) *= pow(randomValue, exponent)

其中指数越高,你将得到更多的点在球体的中间。

© www.soinside.com 2019 - 2024. All rights reserved.