Обнаружение столкновений между ускоряющимися сферами

Я пишу физический движок / симулятор, который включает в себя трехмерный космический полет, планетарную / звездную гравитацию, тягу корабля и релятивистские эффекты. Пока все идет хорошо, но мне нужна помощь по математике алгоритма обнаружения столкновений.

Итеративная симуляция движения, которую я использую, в основном выглядит следующим образом:

(Примечание. 3D-векторы - это ВСЕ КОПИИ.)

For each obj

    obj.ACC = Sum(all acceleration influences)

    obj.POS = obj.POS + (obj.VEL * dT) + (obj.ACC * dT^2)/2     (*EQ.2*)

    obj.VEL = obj.VEL + (obj.ACC * dT)

Next

Куда:

obj.ACC is the acceleration vector of the object
obj.POS is the position or location vector of the object
obj.VEL is the velocity vector of the object

obj.Radius is the radius (scalar) of the object

dT is the time delta or increment

Что мне в основном нужно сделать, это найти эффективную формулу, которая получается из (EQ.2) выше для двух объектов (obj1, obj2) и укажите, сталкиваются ли они когда-либо, и если да, то в какое время. Мне нужно точное время как для того, чтобы я мог определить, находится ли оно в этом конкретном приращении времени (потому что ускорения будут отличаться при разных приращениях времени), а также чтобы я мог определить точное положение (что я знаю, как сделать, учитывая время)

Для этого движка я моделирую все объекты как сферы, и все, что нужно сделать этой формуле / algortithim, - это выяснить, в каких точках:

(obj1.POS - obj2.POS).Distance = (obj1.Radius + obj2.Radius)

где .Distance - положительное скалярное значение. (Вы также можете заключить квадрат в обе стороны, если это проще, чтобы избежать функции квадратного корня, неявной в расчете .Distance).

(да, мне известно о многих, многих других вопросах обнаружения столкновений, однако, кажется, что их решения очень специфичны для их движка и допущений, и ни один из них не соответствует моим условиям: 3D, сферы и ускорение, применяемые с шагом моделирования Дайте мне знать, если я ошибаюсь.)

Некоторые разъяснения:

1) Для меня недостаточно проверить * Пересечение * двух сфер до и после увеличения времени. Во многих случаях их скорости и изменения положения будут намного превышать их радиусы.

2) RE: эффективность, мне не нужна помощь (на данном этапе в любом случае) в отношении определения вероятных кандидатов на столкновения, я думаю, что я это охватил.

Еще одно уточнение, которое, похоже, будет много:

3) Мое уравнение (EQ.2) постепенного движения - это квадратное уравнение, которое применяет обе скоростиа также Ускорение:

obj.POS = obj.POS + (obj.VEL * dT) + (obj.ACC * dT^2)/2

только физические движки, которые я видел (и, конечно, каждый игровой движок, о котором я когда-либо слышал)линейный уравнения инкрементального движения, которые применяютсятолько Скорость:

obj.POS = obj.POS + (obj.VEL * dT)

Вот почему я не могу использовать общедоступные решения для обнаружения столкновений, найденные в StackOverflow, в Википедии и во всем Интернете, такие как поиск пересечения / ближайшего подхода двух отрезков. Моя симуляция имеет дело с переменными ускорениями, которые имеют основополагающее значение для результатов, так что мне нужно пересечение / ближайший подход двухпараболический сегменты.

Ответы на вопрос(4)

Ваш ответ на вопрос