Antes de tudo, para calcular a detecção de colisão entre uma esfera (círculo em 2D) e uma linha, você precisa calcular o vetor perpendicular entre o centro da bola em movimento e a linha. Para calcular essa distância, é necessário fazer o seguinte:
Portanto, para calcular d na figura acima, precisamos executar algumas etapas.
- Suponha que sua linha esteja usando a equação paramétrica P (t) = S + tV, observe que V é a direção da linha que pode ser obtida subtraindo (P2 - P1).
- Partida Pitágoras:
d ^ 2 = len ( Q - S ) ^ 2 - len (proj ( Q - S )) ^ 2
Então você expande a equação para obter o seguinte, parece um pouco complicado, mas na verdade não é.
d = sqrt (len ( Q - S ) ^ 2 - len (( Q - S ) ponto V ) ^ 2 / V ^ 2)
Onde Q é o centro do círculo e S é qualquer ponto da linha. Uma vez que a distância é menor que o raio do círculo / esfera, é necessário acionar a resposta de colisão, explicada no próximo ponto.
É incorreto sempre virar o componente x ou y para rebater a bola, o que você precisa fazer é refletir o vetor de velocidade. Para isso, é necessário calcular o vetor normal da superfície e usar esse normal para calcular a reflexão vector usando a seguinte equação
R = 2 * ( V ponto N ) * N - V
onde R é o vetor de reflexão, N é o normal da superfície e V é o vetor de velocidade.
No caso de 45 graus, sua superfície normal será N = (1,1,0) com sinal variável, dependendo de qual direção a face normal (posição ou negativo).