gpt4 book ai didi

c++ - 二维随机单位 vector

转载 作者:太空宇宙 更新时间:2023-11-04 11:30:15 25 4
gpt4 key购买 nike

我想在二维中生成一个均匀随机的单位 vector ,我一直在 C++ 中使用以下代码片段

double ranf(double x)
{
return double(rand()) * x / (double(RAND_MAX));
}

double phi = ranf(2 * M_PI);

double ndx = cos(phi);
double ndy = sin(phi);

这是正确的吗?

最佳答案

您正在生成一个介于 0 和 2Pi 之间的随机角度 phi,这是 vector 的“航向”。通过使用未缩放的 sincos,您隐含地假设 vector 的长度为 1 并将其分解为垂直和水平分量。在我看来基本上是正确的。

几个小细节:1) 当您除以 RAND_MAX 而不是 RAND_MAX+1 时,您允许零和 x 出现,在您的情况下0 和 2Pi,这两个值在角度方面是相同的。您可能需要相应地更改除数。 2) 我建议乘以 2.0 而不是 2 以避免在乘以 M_PI 时隐式上转换,但这是反正你的编译器可能已经处理好了。

还有另一种方法可以推广到任意维数:生成 k 元组 (z1, z2,..., zk) 其中每个 z 都服从正态分布。计算范数 N=sqrt(z12 + z22 + ... + zk2),并用它来创建归一化 vector X=(z1/N, z2/N ,..., zk/N)。结果是 X 具有单位长度(由于归一化),并且由于法线的分布特性,它的方向在 k 维单位超球面上均匀分布。

关于c++ - 二维随机单位 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25039284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com