【发布时间】:2019-08-21 10:50:17
【问题描述】:
给定 gunction float frand(),生成均匀分布的随机浮点值,范围为 [0.0, 1.0)
如何创建均匀分布的随机 3D 单位向量和 4D 单位四元数? (因此 3D 矢量位于单位球面上,4D - 在单位超球面上,矢量均匀分布在对应的表面之间)
【问题讨论】:
标签: vector random quaternions uniform-distribution
给定 gunction float frand(),生成均匀分布的随机浮点值,范围为 [0.0, 1.0)
如何创建均匀分布的随机 3D 单位向量和 4D 单位四元数? (因此 3D 矢量位于单位球面上,4D - 在单位超球面上,矢量均匀分布在对应的表面之间)
【问题讨论】:
标签: vector random quaternions uniform-distribution
您应该使用 frand() 函数从高斯分布(均值 = 0,偏差 = 1)中选择向量的分量,然后对其进行归一化。
另一种更简单的方法是生成随机向量 (x, y, z...) 作为x = frand(); y = frand(); ... 并丢弃它(生成新的),如果它比 1 长。然后规范化这个向量。这将消除扭曲分布的情况。但是我觉得这种方法很难看,因为它是拉斯维加斯算法的不必要示例,可能不会终止。
【讨论】:
frand() 可用于 Box-Muller 转换以生成此类数字。然后你应该通过将每个分量除以向量的长度来归一化向量,这会将任何向量转换为单位向量。