基于角度和速度计算交点

3
我有一个向量,由一个点、速度和方向组成。我们称这个向量为R。还有另一个只由一个点和速度组成,没有方向的向量。我们称这个向量为T。 现在,我想要找到这两个向量的最短交点。由于T没有方向,这证明是困难的。我能够在CaRMetal中创建一个有效的公式,但我不能在Python中使其工作。 有人能建议一个更有效的方法来解决这个问题吗?或者解决我的现有公式X?
公式: Formula
(来源: bja888.com)
关键字:

定义
(来源: bja888.com)

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


我们看不到您发布的公式或密钥... - gonzofish
2
已修复。当您将图像文件名作为alt文本的一部分时,SO解析器似乎会出现问题。 - int3
在谷歌上搜索“在线解方程”,输入您的公式,点击求解x,就完成了:P - Jochen Ritzel
R的速度是否总是低于T?否则,您可能会遇到一些情况,交叉点永远不会发生。例如,如果R是一辆汽车沿着道路向南行驶,而T是一个人沿着同一条道路奔跑,但从汽车北侧开始。那么这个人将永远不会与汽车的路径相交。 - Hannes Ovrén
@kigurai 我最终得到了一个二次公式,它并不总是有解。 - Otto Allmendinger
清理一下你问题中的定义会很有帮助。"我有一个由点、速度和方向组成的向量"对于习惯于传统速度向量定义的人来说是没有意义的,因为它不涉及位置。更准确的表述应该是"我有一个空间位置和速度向量"。 - Jeffrey Harris
4个回答

1

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

pq是位置向量,de是方向向量。在时间t后,您希望它们处于同一位置:

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

由于您需要方向向量e,将其写成如下形式:

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

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

方向向量e的长度必须为s,因此

(3) e12 + e22 = s2

经过一些方程求解,您最终得到:

(4)

I) a = sum(p-q)/(s2-sum(d2))

II) b = 2*sum(d*(p-q))/(s2-sum(d2))

III) c = -1

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

sum 是对你的向量组件求和(在二维中为2,在三维中为3)。

最后一个是一个二次方程式,你应该可以自己解决的;-)


1
我不了解LaTeX,但HTML中的<sub>和<sup>可能会使其更具可读性... - Nate Kohl
1
嗯,**(2)** 不遵循 (1).. 它的公式是 e = d + (p-q)/t - Jochen Ritzel

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.xR.x + AB.yR.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 就太快了,交集不存在。

例如:


0
  1. 假设第一个点A的速度为零。在这种情况下,找到能够给出最快相交的方向应该非常简单。
  2. 现在,A速度。我们可以通过从B的向量中减去它的速度向量来强制使其速度为零。现在我们可以像1那样解决问题。

这只是我想到的一个粗略的想法...

更多想法:

如果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,方向beta移动:

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

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

alpha' = atan2( Vb_y', Vb_x' )

以上尚未经过测试,但初步看起来合理...


-2

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

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

如果你关心最短的交点,那么当你们的位置相同时,这将会实现,并且在欧几里得空间中,这也会强制第二个“物体”的方向垂直于第一个。你可以写出这个方程并轻松地解决它们。


如果你有两个以不同速度移动的物体,并想找到它们的碰撞点,我相信它们互相垂直移动很少会产生正确的结果。也许你想要找到一个点和一条线之间的最短距离,这个距离将在点和线上的某个点之间,使得它们之间的向量垂直于该线? - Hannes Ovrén

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接