Estou tendo problemas com a prevenção de colisões desalinhadas pelo que considero um caso raro. Eu configurei dois objetos para se moverem um em direção ao outro, mas com um pequeno deslocamento, para que um deles se mova levemente para cima e um deles se mova levemente para baixo.
No meu algoritmo de direção de prevenção de colisão desalinhado, encontro os pontos na linha de frente do objeto e na linha de frente do outro objeto em que essas duas linhas são as mais próximas. Se esses pontos mais próximos estiverem a uma distância de prevenção de colisões e se a distância entre eles for menor que os dois raios das esferas delimitadoras dos dois objetos, os objetos deverão se afastar na direção apropriada.
O problema é que, no meu caso, os pontos mais próximos nas linhas são calculados para ficarem muito longe do ponto de colisão real. Isso ocorre porque as duas linhas avançadas de cada objeto estão se afastando à medida que os objetos passam. O problema é que, por causa disso, nenhuma direção ocorre e os dois objetos colidem parcialmente.
Alguém tem alguma sugestão de como posso calcular corretamente o ponto de colisão? Talvez, de alguma forma, levando em consideração o tamanho dos dois objetos?
fonte
Respostas:
Este é de longe o melhor artigo de detecção de colisão bola a bola que encontrei.
Lições do Pool Hall: Detecção de colisão rápida e precisa entre círculos ou esferas
fonte
Você não quer encontrar o ponto mais próximo.
Você deseja encontrar o ponto nas linhas em que a distância é igual aos raios combinados das duas esferas.
fonte
Se estou entendendo sua pergunta corretamente, você pode simplesmente usar um teste de interseção Sphere vs Sphere, como sugeriu AttackingHobo.
A matemática para fazer esse teste é a seguinte (corrija-me se estiver errado, já faz um tempo). Além disso, isso leva em consideração que suas esferas têm uma variável de centro e raio cada uma.
A fórmula para verificação é mais ou menos assim:
Você tem uma interseção esfera vs esfera. Isso é bem simples, vamos ver como é o código!
Mais uma vez, acho que esta é a resposta correta que você pode estar procurando. Se alguém souber que isso está errado, corrija-me, pois já faz um tempo desde que eu fiz essas contas.
fonte
Ok, espero que isso faça sentido ... Pegue os vetores das bolas e calcule seu ponto de colisão, chame isso de p1. Encontre o ângulo entre os 2 vetores, chame isso de a1. Em a1 / 2, desenhe uma linha, que estará no meio exato em graus entre os dois vetores. Você precisa da localização nesta linha em que sin (a1 / 2) = (raio1 + raio2) / 2. Se esta imagem é visualizada na minha cabeça, é aqui que a colisão ocorre. Desculpe se isso está errado ... está atrasado.
fonte