Estou desenvolvendo um jogo em Flash e preciso de uma ajudinha. Pode ser considerado um problema de matemática.
Meu objeto está voando com velocidade X
e meu objeto pode colidir com pedras. Quando ela colide com uma pedra, preciso que meu objeto quebre a pedra e continue, mas com menos velocidade. É fácil codificá-lo e escrever algo como:, myVelocity -= 10;
mas meu principal problema é que quero perder menos velocidade quanto maior a velocidade inicial.
Por exemplo: se a velocidade for 300, quero perder 10 e, se for 200, quero 20.
Isso pode ser feito com algum tipo de fórmula?
mathematics
physics
Afra
fonte
fonte
log(myVelocity + 1) * N
?Respostas:
Gostaria de inverter a velocidade e multiplicar por algo que você gosta:
Este exemplo fornece estes efeitos:
fonte
os sistemas que você e outras pessoas descrevem não irão gerar uma aparência real. a fórmula principal é diminuir 0,5 * m * v ^ 2 (energia cinemática) por um valor constante sempre que o objeto atingir algum lugar.
portanto, se um objeto com peso de 2Kg atingir algum bloco, que precisa de energia de 16j antes de quebrar: a velocidade de movimento do objeto mudará de acordo com esta tabela:
fonte
Você realmente não forneceu informações suficientes para dizer que tipo de intervalo deseja, ou seja, se está limitado, se deseja progressão geométrica etc.
A primeira coisa que você deseja fazer é derivar um número proporcional à quantidade de velocidade que você deseja perder (não precisa ser o mesmo, mas deve diminuir à medida que a velocidade aumenta para torná-lo proporcional à sua perda). A maneira padrão de fazer isso é tomar o inverso :
Agora, para 100 você terá 0,01, para 200 terá 0,005, para 300 terá 0,0033 e assim por diante.
Agora você só precisa ajustar esse número para o que realmente deseja, multiplicando-o. assim
você receberá 20 por 300, mas 15 por 200 em vez de 10. Isso pode ser bom para você; nesse caso, você não precisa ler mais. Você pode ajustar k como quiser, mas pode não obter os números da maneira que preferir, a menos que faça um pouco mais, como implementar a progressão geométrica ou alterar a base para aumentar. Não vou entrar em progressões geométricas aqui, mas se você quiser alterar a base, faça o seguinte:
Isso fornecerá o intervalo solicitado originalmente na sua pergunta: 300 -> perda de 10, 200 -> perda de 20. FYI 100 -> perda de 40 e 50 -> perda de 80 (!), O que significa que você precisaria restringir sua subtração - o que fiz nas linhas (1) e (2).
Existem outras maneiras de abordar todo esse problema, é claro, que tenho certeza de que aqueles que são matematicamente mais adeptos do que eu, postarão aqui.
fonte
Eu acho que você pode usar apenas uma simples divisão por velocidade. Por exemplo: perdido = 3 000 / myVelocity. Quando a velocidade é 300, você perde 10, quando 200, perde 15. Cabe a você escolher constantes corretas.
Se desejar, você pode usar uma fórmula mais complexa, como: constante / (constante2 * velocidade ^ 2 + constante3 * velocidade). Mais uma vez - basta escolher constantes, o que mais lhe convém.
fonte