Detecção de Colisão entre Esferas Aceleradoras

Estou escrevendo um simulador / motor de física que incorpora o vôo espacial 3D, gravitação planetária / estelar, empuxo de navio e efeitos relativísticos. Até agora, está indo muito bem, no entanto, uma coisa que eu preciso de ajuda é a matemática do algoritmo de detecção de colisão.

A simulação iterativa do movimento que estou usando é basicamente a seguinte:

(Nota: os vetores 3D são TODOS OS TAMPÕES.)

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

Onde:

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

O que eu basicamente preciso fazer é encontrar alguma fórmula eficiente que deriva de (EQ.2) acima para dois objetos (obj1, obj2) e dizer se eles colidirem, e em caso afirmativo, a que horas. Eu preciso do tempo exato tanto para que eu possa determinar se é neste incremento de tempo particular (porque as acelerações serão diferentes em diferentes incrementos de tempo) e também para que eu possa localizar a posição exata (o que eu sei fazer, dada a Tempo)

Para este mecanismo, estou modelando todos os objetos como esferas, tudo o que essa fórmula / algortitim precisa fazer é descobrir em quais pontos:

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

onde. A distância é um valor escalar positivo. (Você também pode quadrar os dois lados, se isso for mais fácil, para evitar a função raiz quadrada implícita no cálculo .Distance).

(sim, estou ciente de muitas, muitas outras questões de detecção de colisão, no entanto, todas as soluções parecem ser muito particulares ao mecanismo e suposições, e nenhuma parece corresponder às minhas condições: 3D, esferas e aceleração aplicadas nos incrementos de simulação Deixe-me saber se estou errado.)

Algumas clarificações:

1) Não é suficiente para eu verificar * Intersection * das duas esferas antes e depois do incremento de tempo. Em muitos casos, suas velocidades e mudanças de posição excederão em muito seus raios.

2) RE: eficiência, eu não preciso de ajuda (neste ponto de qualquer maneira) com relação a determinar prováveis ​​candidatos a colisões, eu acho que eu cobri isso.

Outro esclarecimento, que parece estar chegando muito:

3) minha equação (EQ.2) do movimento incremental é uma equação quadrática que aplica tanto Velocitye Aceleração:

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

os motores de física que eu vi, (e certamente todos os mecanismos de jogo que eu já ouvi falar) apenaslinear equações de movimento incremental que se aplicamsó Velocidade:

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

É por isso que não posso usar as soluções comumente publicadas para detecção de colisão encontradas no StackOverflow, na Wikipedia e em toda a Web, como encontrar a intersecção / abordagem mais próxima de dois segmentos de linha. Minha simulação lida com acelerações variáveis ​​que são fundamentais para os resultados, então o que eu preciso é a intersecção / abordagem mais próxima de doisparabólico segmentos.

questionAnswers(4)

yourAnswerToTheQuestion