Seguindo a minha pergunta anterior : Eu tenho a bola quicando de maneira bastante realista nas superfícies que bate. Agora eu gostaria de fazer girar a partir do atrito do golpe .
Mostrar isso é bastante simples: eu giro a bola pela sua velocidade angular a cada tick e aplico a mesma rotação quando é renderizada.
Quando uma bola bate em uma parede, eu sei que a velocidade de rotação é afetada por ...
- velocidade inicial da bola ao atingir a superfície
- os coeficientes de atrito da bola e da superfície (constantes físicas)
- o ângulo de incidência (o ângulo entre o vetor de velocidade de entrada da bola e a superfície normal).
O ângulo de incidência é aproximado pelo produto escalar dos vetores de velocidade de impacto e velocidade de saída da bola. (1 significa giro alto, -1 significa que não giro e todo o resto relativamente)
Multiplicando todos os itens acima e certificando-se de que foram então transformados no intervalo de 0 a 1 e multiplicados pela velocidade máxima de rotação, a bola pareceu responder na velocidade de rotação conforme o esperado. Exceto por uma coisa: sempre rodava no sentido horário (devido a valores positivos).
Esse é um bom método? Você consegue pensar em uma maneira mais simples?
Se esse método parece bom, o que estou perdendo? Como sei quando a bola deve girar no sentido anti-horário?
fonte
Primeiro, obtenha a tangente da superfície da superfície normal: t = (ny, -nx)
Então você pode obter o componente de velocidade ao longo da superfície como vt = v ponto t .
Agora você pode calcular a rotação da bola: w = | ( normal * r) cruze vt |, onde r é o raio da bola.
Suponho que a bola não tenha inércia de rotação e comece a girar instantaneamente na velocidade que faria se rolasse pela superfície. Você pode usar um coeficiente de atrito para torná-lo mais realista e, se desejar, levar em consideração a inércia rotacional da bola.
fonte
Ok, isso pode parecer estúpido, mas você não está usando o produto escalar do vetor de bola e a superfície normal e apenas fazendo um arco para calcular o ângulo, não é? Porque então o ângulo seria positivo, seja positivo (até 90 graus) ou negativo (idem), pois o cosseno é simétrico em torno de 0.
Se esse for o caso, em vez de usar o normal do plano, use a própria direção do plano e subtraia 90 graus do ângulo, de modo que 0 a 180 se tornará de -90 a +90 graus (ou -p PI a + meio PI se você estiver inclinado radialmente).
fonte
A primeira coisa que você precisa abordar é se a velocidade de rotação ou rotação antes de bater na parede; digamos Si; é maior, igual ou menor que o valor necessário para manter o mesmo giro após atingir, digamos Ss. Com isso, você pode obter o valor real depois de girar, digamos Se, usando um valor de atrito entre a bola e a superfície
Obtenha o componente de velocidade através da superfície de salto Vxi = Vi ponto Vx, sendo Vx um vetor paralelo à superfície com magnitude 1.
O valor que você está procurando é Ss = Vxi / r, isto é, transformar Vxi em velocidade angular. Se Si for menor que Ss, a bola deve girar positivamente. Se Si for igual a Ss, a bola deve manter aproximadamente o mesmo giro, sobre isso mais tarde. Se Si for maior que Ss, a bola deve perder rotação
as perdas e ganhos de velocidade dependem do valor de atrito Pe. Na verdade, é um cruzamento entre o raio e a força de atrito, mas você pode definir esse valor como desejar.
Você também deve observar que, além do coeficiente de rebote, a bola perde energia devido a um atrito entre a bola e a superfície, portanto Vxi é afetado negativamente. Eu diria que o coeficiente de ressalto afeta Vy e o atrito afeta Vx.
Você deve levar em conta a deformação da bola. Isso afetará o tempo ou os quadros em que a bola ficará grudada na parede, assim a força de fricção exercerá por um tempo mais longo, afetando a velocidade de rotação e saída. Essa deformação depende de como você deseja que seu modelo seja.
fonte