将随机扩展添加到方向向量

时间:2013-11-17 07:50:10

标签: vector spread

假设我有一个单位向量a =向量(0,1,0),我想在x =向量(-0.2,0,-0.2)和y =向量(0.2, 0,0.2),我该怎么做呢?

如果我只想在x和y之间生成一个随机向量,我会在一个正方形的边界内得到一个值:

square

我想要的是由x和y组成的圆圈内的值:

circle

这似乎是一个简单的问题,但我现在无法找到解决方案。任何帮助将不胜感激。

(我没有在mathoverflow上问这个,因为这不是'研究水平的数学问题')

1 个答案:

答案 0 :(得分:1)

如果我正确地阅读了你的问题,你想要一个在特定长度(圆的半径)内的随机方向的矢量。

圆的公式为: x 2 + y 2 = r 2

所以,如果你有一个最大半径, r ,这会限制向量​​长度,也许会这样做:

  1. 选择 x 的随机值,位于 -r + r
  2. 之间
  3. 根据您选择的 x 计算随机化 y 的限制,因此 y lim = sqrt(r 2 - x 2
  4. 最后,在 -y lim + y lim 之间选择 y 的随机值
  5. 这样,您在 x 中获得随机方向,在 y 中获得随机方向,但矢量长度将保持在 0 之内 r 等将被限制在该半径的圆圈内。

    在您的示例中,似乎 r 应为 sqrt(0.2 2 ,大​​约 0.28284

    更新

    因为3D矢量的长度(或幅度) sqrt(x 2 + y 2 + z 2 你可以将技术扩展到3D,虽然我可能更喜欢不同的方法(也适用于2D)。

    1. 选择任意 x y z
    2. 选择随机方向
    3. 计算幅度 m = sqrt(x 2 + y 2 + z 2
    4. 规范化方向向量(通过将每个元素除以其大小),因此 x = x / m y = y / m z = z /米
    5. 现在选择 0 r
    6. 之间的随机长度 L
    7. 按随机长度缩放方向向量。所以 x = x * L y = y * L z = z * L