Preciso retocar minha trigonometria e espero que você possa ajudar aqui com um modelo matemático simples. Aqui está o meu modelo até agora na imagem em anexo. Estou ciente de que a animação do quadro apresenta outros problemas quando a bola está se movendo muito rápido, mas, por enquanto, só preciso calcular ballDx e ballDy. Também é possível que ballDx = 0 (somente movimento vertical), mas quando a bola desviar ballDx pode obter um valor diferente.
46
Respostas:
Nota: Todos os itens a seguir assumem que a superfície da bola não possui atrito (portanto, ela não começará a girar ou se recuperar de forma diferente porque é).
No momento da colisão, a bola estará tocando o canto. Quando objetos sólidos colidem, uma força age ao longo da superfície normal, ou seja, perpendicular à superfície no ponto de colisão.
Como é uma bola, perpendicular à superfície está em direção ao centro da bola. Ok, então sabemos a direção da força, e quanto à sua magnitude? Assumindo uma colisão elástica (e que o retângulo não pode se mover), a bola deve se recuperar na mesma velocidade em que impactou.
Seja (nDx, nDy) a velocidade após a colisão, (oDx, oDy) a velocidade antes da colisão e (x, y) a posição da bola no ponto de colisão. Vamos assumir ainda que o canto com o qual a bola colide está em (0,0).
Expressando nossas idéias como fórmulas, temos:
O que equivale a:
Substituindo as duas primeiras equações na última, obtemos:
Expansão usando o torem binomial
rendimentos:
Essa equação quadrática para
c
tem duas soluções, uma das quais é 0. Obviamente, não é essa a solução em que estamos interessados, pois geralmente a direção da bola muda como resultado da colisão. Para obter a outra solução, dividimos os dois lados por ce obtemos:Isso é:
Para resumir, temos:
Editar : No código:
Algumas considerações de implementação: Embora você possa se aproximar (x, y) da posição da bola após a etapa de simulação, essa aproximação alterará o ângulo de deflexão e, portanto, será muito perceptível, portanto, suas etapas de simulação precisam ser muito boas (talvez tal a bola não move mais de 1/20 do seu diâmetro por etapa). Para uma solução mais precisa, você pode calcular o tempo em que a colisão ocorre e dividir a etapa de simulação naquele momento, ou seja, executar uma etapa parcial até o ponto de colisão e outra etapa parcial para o restante da etapa.
Edit 2: Computando o ponto de impacto
Seja r o raio, (x0, y0) a posição e (dx, dy) a velocidade da bola no início do passo da simulação. Para simplificar, vamos supor que o canto em questão esteja localizado em (0,0).
Nós sabemos:
Nós queremos
Isso é
Essa é uma equação quadrática em t. Se seu discriminante
é negativo, não tem soluções, ou seja, a bola nunca acertará o canto no seu percurso atual. Caso contrário, suas duas soluções são dadas por
Estamos interessados no momento em que a colisão começou, que é a anterior
t1
.Seu método se tornaria:
fonte
At the moment of collision, the ball will be touching the corner
mas não vejo uma justificativa para essa aproximação (e deve ser uma aproximação porque não é verdade - a bola está tocando em dois lugares, nenhum dos quais é o canto).Aqui está uma maneira visual de analisar um problema.
O conjunto de problemas original é círculo x retângulo (cinza na imagem abaixo). Isso é equivalente ao ponto x retângulo arredondado (mostrado em preto).
Portanto, este é um problema de várias partes. Você está testando sua colisão de pontos vs. 4 linhas (extrudadas da borda da caixa pelo raio do círculo original) e 4 círculos (nos cantos do retângulo com o mesmo raio do círculo original).
Com a velocidade aproximada da imagem original, o ponto atingirá o círculo do canto inferior direito. Tudo o que você precisa fazer é descobrir o ponto no círculo do canto em que você atingirá, calcular o ângulo e refletir sobre ele.
Deixarei a derivação disso como um exercício para o leitor.
fonte
Estou trabalhando em um jogo e também preso aqui. Mas acho que é assim:
Há outra visão. Meu problema é que não sei como calcular rapidamente o novo dx, dy (para mim, usar a matemática tradicional requer muitos cálculos).
fonte
A cinemática tem tudo a ver com escolher o quadro de referência correto, como o mais conveniente para os cálculos.
Aqui, primeiro definiremos a transformação T que resolve nossos eixos em componentes paralelos ( x ' ) e perpendiculares ( y' ) a uma linha entre o centro da bola e o canto. A transformação inversa T * restaurará nosso sistema de coordenadas original.
Nesse novo quadro de referência, pela reflexão (e pela simetria temporal e espacial da física), temos a transformação de velocidade do contato M (um impulso pontual ) como aquele que reverte o componente x ' e deixa inalterado o componente y' . Em termos de matriz , essa é a matriz diagonal com -1 e 1 na diagonal.
Então a velocidade após a colisão é simplesmente: V ' = T * . M . T . Vo .
O momento do impacto t é, em seguida, apenas a solução de ( T . Do ) + ( X . T . Vo ) ( t ) = r onde X é o operador de projecção do eixo X e r é o raio da esfera. Reorganizados, obtemos
t = ( r - ( T . Do )) / (( X . T . Vo ) ( t ))
Isso tem a vantagem distinta de enterrar toda a matemática complexa em bibliotecas gráficas padrão rigorosamente escritas, testadas e depuradas. Essa solução também é idêntica para situações 2D e 3D - basta alternar entre a biblioteca de gráficos. Por fim, destaca que é preciso primeiro pensar em quadros de referência apropriados antes de enfrentar qualquer problema de física. Sempre existe a tentação do NIH, mas na verdade isso é apenas uma receita para bugs quando soluções mais sucintas estão disponíveis.
fonte