公式:
![Formula](https://istack.dev59.com/kGd2H.webp)
(来源: bja888.com)
关键字:
(来源: bja888.com)
其中o或k表示向量之间的速度差。R.speed / T.speed
(来源: bja888.com)
其中o或k表示向量之间的速度差。R.speed / T.speed
我的数学可能有点生疏,但请试试这个:
p和q是位置向量,d和e是方向向量。在时间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)。
最后一个是一个二次方程式,你应该可以自己解决的;-)
e = d + (p-q)/t
。 - Jochen RitzelPoint 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 就太快了,交集不存在。
例如:
这只是我想到的一个粗略的想法...
更多想法:
如果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' )
以上尚未经过测试,但初步看起来合理...
好的,如果我理解正确,你有
R = [ xy0,v,r ] T = [ xy1,v ]
如果你关心最短的交点,那么当你们的位置相同时,这将会实现,并且在欧几里得空间中,这也会强制第二个“物体”的方向垂直于第一个。你可以写出这个方程并轻松地解决它们。