math - 在 3d 空间中的一个点周围均匀排列 X 数量的物体

标签 math random geometry

如果我有 X 数量的东西(让我们随机说 300)

是否有一种算法可以将这些东西均匀地围绕中心点排列?就像 100 面骰子或球体的 3D 网格?

我宁愿让东西像这样均匀分布.. enter image description here

而不是这种极地方式..

enter image description here

ps。对于那些感兴趣的人来说,想知道我为什么要这样做? 好吧,我做 these 是为了好玩,在完成 #7 后,我决定在 Unity 中以 3D 形式表示电线阵列,并观察它们以缓慢的方式运行。

最佳答案

这是一个简单的转换,将统一样本映射到矩形 [0, 2 pi] x [-1, 1]到半径为 r 的球体上的均匀样本上:

T(phi, z) = (r cos(phi) sqrt(1 - z^2), r sin(phi) sqrt(1 - zˆ2), r z)

这种变换在球体上产生均匀样本的原因是任何区域的面积 T(U)通过变换区域U得到矩形不依赖于U但在U区域.

为了从数学上证明这一点,只要验证向量积的范数就足够了

| ∂T/∂phi x ∂T/∂z |

是常数(球体上的面积是该矢量乘积对 phiz 的积分)。

总结

生成均匀分布在半径 r 的球体中的随机样本执行以下操作:

  • 生成随机样本 (phi_1, ..., phi_n)均匀分布于 [0, 2 pi] .
  • 生成随机样本 (z_1, ..., z_n)均匀分布于 [-1, 1] .

  • 对于每对 (phi_j, z_k)计算T(phi_j, z_k)使用上面的公式。

关于math - 在 3d 空间中的一个点周围均匀排列 X 数量的物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34142701/

相关文章:

algorithm - 将 "sum"和 "multiply"运算符放在给定整数列表的元素之间,以便表达式产生指定值

math - F#:多项式乘法

java - 为这个 rand 生成器建议一些更优化的解决方案

algorithm - 找到点的质心

geometry - 如何使用 Flutter 的 PhysicalModel 制作圆形边框?

algorithm - 六边形内有 6 个等边三角形,给定 x,y 坐标,如何确定坐标在哪个等边三角形中?

math - 两组 3d 点

html - div 高度相对于 div 内的某个数值

Android-findViewById(int)方法未定义类型优先(Fragment)

使用 set.seed 函数的原因