【问题标题】:Method that returns random point in radius of provided Vector2, with higher chance at centre of radius than edge返回提供的 Vector2 半径中的随机点的方法,半径中心的机会高于边缘
【发布时间】:2020-05-02 17:02:17
【问题描述】:

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

我已尝试寻找解决此问题的方法,但未能在搜索引擎中很好地描述问题,无法得出好的结果。

希望这里有人可以为我指明正确的方向。非常感谢任何语言的代码示例!

【问题讨论】:

    标签: math game-engine game-physics physics


    【解决方案1】:

    这个怎么样:

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

    【讨论】:

      【解决方案2】:

      不确定这是否正是您想要的,但它应该为您提供一些分布,球体中心的每体积点更多:

      您可以使用这个简单的公式在球体表面上找到一个随机均匀分布的点:Generate a random sample of points distributed on the surface of a unit sphere

      当你把这个点乘以一个随机值并除以 r 向内移动时:

      (x,y,z) *= randomValue

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

      这给出了相对于 r 的均匀分布,但由于表面随着半径变小而变小,因此您的点将集中在中间。

      如果你想进一步调整分布,你可以给 randomValue 增加一些力量:

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

      指数越高,球体中间的点数就越多。

      【讨论】:

      • 感谢您的建议。我实际上是在寻找 Vector2 解决方案。我已经更新了原始问题。我最终将它应用于 Vector3,但 Y 值保持不变。我很抱歉。
      • 您仍然可以将此方法应用于圆。只需忽略角度 phi 和 z 坐标,就完成了。
      猜你喜欢
      • 2016-11-21
      • 1970-01-01
      • 2014-11-26
      • 2022-12-17
      • 2016-06-17
      • 2011-01-31
      • 2023-02-09
      • 2013-05-03
      • 2021-02-10
      相关资源
      最近更新 更多