如果我有 X 数量的东西(让我们随机说 300)
是否有一种算法可以将这些东西均匀地围绕中心点排列?就像 100 面骰子或球体的 3D 网格?
而不是这种极地方式..
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 |
是常数(球体上的面积是该矢量乘积对 phi
和 z
的积分)。
总结
生成均匀分布在半径 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/