基于角度和速度计算交点

时间:2009-12-03 12:20:52

标签: python math vector performance intersection

我有一个由点,速度和方向组成的向量。我们将这个向量称为R.而另一个向量只包含一个点和一个速度。没有方向。我们称之为T. 现在,我要做的是找到这两个向量的最短交点。由于T没有方向,这被证明是困难的。我能够创建一个在CaRMetal中工作的公式,但我无法在python中使用它。 有人可以提出一种更有效的方法来解决这个问题吗?或者解决我现有的X公式?

公式:

Formula
(来源:bja888.com

键:

Definitions
(来源:bja888.com

其中o或k是向量之间的速度差异。 R.speed / T.speed

4 个答案:

答案 0 :(得分:1)

我的数学可能有点生疏,但试试这个:

p q 是位置向量, d e 是方向向量。在 t 之后,您希望它们位于同一个地方:

(1) p + t * d = q + t * e

由于你想要方向向量 e ,所以像这样写

(2) e =(p-q)/ t + d

现在您不需要时间 t ,您可以使用速度约束 s 计算(否则您可以直接前往另一个点):< / p>

方向向量 e 必须是 s 的长度,所以

(3) e 1 2 + e 2 2 = s 2

经过一些方程解决后,你最终得到了

(4)

I) a = sum(pq)/(s 2 -sum(d 2 ))

II) b = 2 * sum(d *(pq))/(s 2 -sum(d 2 ))

III) c = -1

IV) a + b * t + c * t 2 = 0

总和遍历你的矢量组件(2d中2个,3d中3个)

最后一个是你应该能够自己解决的二次公式; - )

答案 1 :(得分:0)

  1. 让我们假设第一点, A,零速度。在这种情况下,它 应该很容易找到 将给予的方向 最快的交集。
  2. 现在,A 确实有速度。我们可以通过从B的向量中减去它的速度向量来强制它获得零速度。现在我们可以像在1中那样解决。
  3. 想到一个粗略的想法......

    更多想法:

    如果A静止不动,那么B方向需要进入的方向是直接朝向A.这使我们得到了A静止不动的坐标系中的方向。我们称之为d。

    现在我们只需要转换方向B需要从A静止的坐标系转换到A以给定速度和方向移动的坐标系d2。

    这只是矢量添加。 d3 = d - d2  我们现在可以找到d3的方向。

    更正式一点:

    A是静止的

    Sb = B的速度,已知,标量

    alpha = atan2(a_y-b_y,a_x-b_x)

    Vb_x = Sb * cos(alpha)

    Vb_y = Sb * sin(alpha)

    A以速度Sa移动,方向测试

    Vb_x'= Sb * cos(alpha)+ Sa * cos(beta)

    Vb_y'= Sb * sin(alpha)+ Sa * sin(beta)

    alpha'= atan2(Vb_y',Vb_x')

    没有对上述内容进行测试,但乍看之下看起来很合理......

答案 2 :(得分:0)

在自然界中,猎人使用恒定的轴承减小范围算法捕捉猎物。 我喜欢蝙蝠如何做到这一点的解释link text

我们需要再定义一些术语。

Point A         - the position associated with vector R.
Point B         - the position associated with vector T.
Vector AB    - the vector from point A to point B
Angle beta  - the angle between vector R and vector AB.
Angle theta - the angle between vector T and vector AB

公式通常以

表示
theta = asin( |R| * sin(beta) / |T| )

,其中

beta = acos(AB.x R.x + AB.y R.y)

你不想直接使用它,因为asin和acos只返回-PI / 2到PI / 2之间的角度。

beta  = atan2( R.y, R.x  ) - atan2( AB.y, AB.x )
x        = |R| * sin(beta) / |T|
y        = 1 + sqrt( 1 - x*x )
theta = 2*atan2( y, x )

当然如果x> 1 R太快,交叉点不存在

EG

答案 3 :(得分:-2)

好的,如果我理解你,你有

R = [xy0,v,r]    T = [xy1,v]

如果你担心最短的交叉点,这将在你的位置相同时实现,并且在欧几里德空间中,这也会迫使第二个“东西”的方向垂直于第一个。你可以写下这个方程并轻松解决它们。