1

假设我有一个单位向量 a = Vector(0,1,0) 并且我想在 x = Vector(-0.2,0,-0.2) 和 y = Vector(0.2,0,0.2) 之间添加随机分布),我将如何去做呢?

如果我要在 x 和 y 之间简单地生成一个随机向量,我会在正方形边界的某处得到一个值:

正方形

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

圆圈

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

(我没有在 mathoverflow 上问这个问题,因为这不是一个真正的“研究级数学问题”)

4

1 回答 1

1

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

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

因此,如果您有一个最大半径r来限制矢量长度,那么可能会进行如下操作:

  1. 为x选择一个随机值,位于-r+r之间
  2. 根据您选择的x计算随机化y的限制,因此y lim = sqrt(r 2 - x 2 )
  3. 最后,在-y lim+y lim之间选择一个随机值y

这样,您会在x中获得随机方向,在y中获得随机方向,但向量长度将保持在0r之间,因此将被限制在该半径的圆内。

在您的示例中,似乎r应该是sqrt(0.2 2 ),大约是0.28284

更新

由于 3D 向量具有长度(或大小)sqrt(x 2 +y 2 +z 2 ),因此您可以将该技术扩展到 3D,尽管我可能更喜欢一种不同的方法(这也适用于 2D)。

  1. 通过选择任意 xyz来选择随机方向
  2. 计算大小m = sqrt(x 2 +y 2 +z 2 )
  3. 归一化方向向量(通过将每个元素除以其大小),所以x = x/my = y/mz=z/m
  4. 现在选择一个随机长度,L介于0r之间
  5. 按随机长度缩放方向向量。所以x = x * L , y = y * L , z = z * L
于 2013-11-17T08:01:12.357 回答