Простая проблема - скорость и столкновения - PullRequest
1 голос
/ 07 декабря 2009

Хорошо, я работаю над космическим симом, и, как и большинству космических симов, мне нужно выяснить, где будет находиться корабль противника (позиция 3d), когда моя пуля достигнет его. Как рассчитать это по скорости, с которой летят пули, и скорости корабля противника?

Ответы [ 4 ]

1 голос
/ 07 декабря 2009

Рассчитайте вектор относительной скорости между ним и вами: это можно считать его движением, если вы стоите на месте Рассчитайте его вектор относительного расстояния. Теперь вы знаете, что он уже D и двигается V каждый раз. Вам нужно вычислить V ', и вы знаете, что это длина, но не направление.

Теперь вы строите треугольник с этими двумя ограничениями: его V и V вашей пули. В двух измерениях это будет выглядеть так:

Dx+Vx*t = V'x*t

Dy+Vy*t = V'y*t

V'x^2 + V'y^2 = C^2

Что упрощает до:

(Dx/t+Vx)^2 + (Dy/t+Vx)^2 = C^2

И вы можете использовать квадратную формулу, чтобы решить это. Вы можете применить эту технику в трех измерениях аналогично. Есть и другие способы решения этой проблемы, но это всего лишь простая алгебра вместо векторного исчисления.

1 голос
/ 07 декабря 2009

Добавьте отрицательную скорость корабля к пуле, чтобы только пуля двигалась. Затем вычислите пересечение формы корабля и линии, по которой движется пуля (* pos -> pos + vel * dt *).

1 голос
/ 07 декабря 2009

Обнаружение столкновения Куртом Миллером
http://www.gamespp.com/algorithms/collisionDetection.html

0 голосов
/ 07 декабря 2009

Вопрос, вероятно, должен заключаться не в том, «где будет находиться корабль, когда пуля попадет в него», а в том, ЕСЛИ пуля его ударит. Предполагая линейную траекторию и постоянную скорость, рассчитайте пересечение двух векторов, один из которых представляет путь снаряда, а другой - путь корабля. Затем вы можете определить время, в которое каждый объект (корабль и пуля) достигнет этой точки, разделив расстояние от исходного положения до положения пересечения на скорость каждого. Если время совпадает, у вас есть столкновение и место, в котором оно произошло.

Если вам нужно более точное обнаружение столкновений, вы можете использовать что-то вроде простого BSP-дерева, которое даст вам не только быстрый способ определения столкновений, но и на какой поверхности произошло столкновение, и, при правильной обработке, точное 3d-местоположение столкновения. Однако может быть сложно поддерживать такое дерево в динамичной среде.

...