0

A、B、C 点

我想要做的是,如果我将两个对象 [A 和 B] 放在某些位置,我怎样才能找到 C 应该在哪里?速度不一样。对象 A 的速度为 30 m/s,对象 B 的速度为 20 m/s。

在图片中,我画出速度是相同的。不过,它应该让您大致了解我正在尝试做的事情。

我一直在搞砸这个,但我什至不知道从哪里开始。

提前感谢所有回复的人。

4

2 回答 2

2

首先,写出两个方程来表示每个点在时间 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 值。有四种可能的结果:

  • 任何 t 值都是“永远不会发生碰撞”。碰撞永远不会发生。
  • 两个或多个 t 值是不相等的实数。碰撞永远不会发生。
  • 所有 t 值都是“碰撞随时可能发生”。这些点在其轨迹上的每个点上都不断地发生碰撞。
  • 所有为实数的 t 值彼此相等。那时就会发生碰撞。(如果该时间为负数,则碰撞发生在您开始模拟之前;您可能希望也可能不希望将此视为“永远不会发生碰撞”)

如果最终归入最终类别,则将碰撞时间插入 xpos_a、ypos_a、zpos_a 函数以获取碰撞的空间坐标。

于 2013-03-26T16:27:30.943 回答
1

给定点 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 得到xy

x = (b2 - b1)/(m1 - m2)
y = m1 * x + b1    OR    m2 * x + b2

(x,y)后面提到的^

求解t1t2

t1 = (x-x1) / q1
t2 = (x-x2) / q2

检查ys 的t1 和 t2 是否为真

t1 ?= (y-y1) / w1
t2 ?= (y-y2) / w2

如果它们是相同的,那么是的,它们会发生碰撞,在(x,y)

注意:由于四舍五入误差,除非事先完全计算好一切,否则很可能不会发生碰撞

于 2013-03-26T16:34:55.963 回答