3

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

公式:

公式
(来源:bja888.com

钥匙:

定义
(来源:bja888.com

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

4

4 回答 4

1

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

pq是位置向量,de是方向向量。在时间t之后,您希望他们在同一个地方:

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

既然你想要方向向量e,就这样写

(2) e = (pq)/t + d

现在您不需要时间t,您可以使用您的速度限制s来计算它(否则您可以直接前往另一点):

方向向量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 ))

三) c = -1

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

总和超过您的矢量分量(2d 中的 2,3d 中的 3)

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

于 2009-12-03T13:08:41.507 回答
0
  1. 假设第一个点 A 的速度为零。在这种情况下,找到将给出最快交叉点的方向应该非常简单。
  2. 现在,A确实有速度。我们可以通过从 B 的向量中减去它的速度向量来强制它的速度为零。现在我们可以像在 1 中那样求解。

只是想到了一个粗略的想法......

还有一些想法:

如果 A 静止不动,则 B 需要行进的方向是直接朝向 A。这为我们提供了 A 静止不动的坐标系中的方向。让我们称之为d。

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

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

更正式一点:

A 是静止的

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

阿尔法= atan2(a_y-b_y,a_x-b_x)

Vb_x = Sb * cos(alpha)

Vb_y = Sb * sin(alpha)

A 以速度 Sa 移动,方向 beta

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

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

alpha' = atan2( Vb_y', Vb_x' )

以上没有测试过,但乍一看似乎很合理......

于 2009-12-03T13:21:03.250 回答
0

在自然界中,猎人使用恒定方位递减范围算法来捕捉猎物。我喜欢蝙蝠如何做这个链接文本的解释

我们需要定义更多的术语。

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 太快并且不存在交集

例如

于 2009-12-03T14:27:04.470 回答
-2

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

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

如果您关心最短的交点,这将在您的位置相同时实现,并且在欧几里得空间中,这也会迫使第二个“事物”的方向垂直于第一个。您可以为此写下方程式并轻松求解。

于 2009-12-03T13:23:40.583 回答