我想要做的是,如果我将两个对象 [A 和 B] 放在某些位置,我怎样才能找到 C 应该在哪里?速度不一样。对象 A 的速度为 30 m/s,对象 B 的速度为 20 m/s。
在图片中,我画出速度是相同的。不过,它应该让您大致了解我正在尝试做的事情。
我一直在搞砸这个,但我什至不知道从哪里开始。
提前感谢所有回复的人。
我想要做的是,如果我将两个对象 [A 和 B] 放在某些位置,我怎样才能找到 C 应该在哪里?速度不一样。对象 A 的速度为 30 m/s,对象 B 的速度为 20 m/s。
在图片中,我画出速度是相同的。不过,它应该让您大致了解我正在尝试做的事情。
我一直在搞砸这个,但我什至不知道从哪里开始。
提前感谢所有回复的人。
首先,写出两个方程来表示每个点在时间 t 的 x 位置。
xpos_a(t) = original_xpos_a + xvelocity_a * t
xpos_b(t) = original_xpos_b + xvelocity_b * t
当两点碰撞时,它们的 x 位置将相等。设置 xpos_a 等于 xpos_b 并求解 t。
original_xpos_a + xvelocity_a * t = original_xpos_b + xvelocity_b * t
xvelocity_a * t - xvelocity_b * t = original_xpos_b - original_xpos_a
t * (xvelocity_a - xvelocity_b) = original_xpos_b - original_xpos_a
t = (original_xpos_b - original_xpos_a) / (xvelocity_a - xvelocity_b)
当您求解 t 时,有三种可能的结果:
t = 0/0
; 碰撞随时可能发生。t = [some nonzero number]/0
; 碰撞永远不会发生。t = some real number
. 如果点确实发生碰撞,则碰撞只能在此时发生。对 Y(和 Z,如果问题是三维的)执行相同的步骤。比较每个维度的 t 值。有四种可能的结果:
如果最终归入最终类别,则将碰撞时间插入 xpos_a、ypos_a、zpos_a 函数以获取碰撞的空间坐标。
给定点 A 和 B,以及向量 C( A 的速度)和 D(B 的速度)。
A = (x1, y1) >start point of A
B = (x2, y2) >start point of B
C = (q1, w1) >constant velocity of A
D = (q2, w2) >constant velocity of B
注意:x1、y1、x2、y2、q1、q2、w1、w2 都是常数
编辑:鉴于 A & C 和 b& D 不是共线的,请关注作品(如果它们确实发生碰撞,只需找出碰撞时间,正如 Kevin 指出的那样)
对它们进行线性化(找不到好的参考):
EQ1 => (x-x1)(w1/q1)=(y-y1) >> (x-x1)(w1/q1) + y1 = y <br>
EQ2 => (x-x2)(w2/q2)=(y-y2) >> (x-x2)(w2/q2) + y2 = y <br>
EQ1 => (w1/q1) * x + y1 - x1(w1/q1) = y
m1 * x +( b1 ) = y
EQ2 => (w2/q2) * x + y2 - x2(w2/q2) = y
m2 * x +( b2 ) = y
求解 EQ1 和 EQ2 得到x
和y
x = (b2 - b1)/(m1 - m2)
y = m1 * x + b1 OR m2 * x + b2
(x,y)
后面提到的^
求解t1
或t2
t1 = (x-x1) / q1
t2 = (x-x2) / q2
检查y
s 的t1 和 t2 是否为真
t1 ?= (y-y1) / w1
t2 ?= (y-y2) / w2
如果它们是相同的,那么是的,它们会发生碰撞,在(x,y)
注意:由于四舍五入误差,除非事先完全计算好一切,否则很可能不会发生碰撞