Estoy desarrollando un juego en Flash y necesito un poco de ayuda. Se puede considerar un problema matemático.
Mi objeto está volando a gran velocidad X
y mi objeto puede chocar con piedras. Cuando choca con una piedra, necesito mi objeto para romper la piedra y continuar, pero con menos velocidad. Es fácil codificarlo y escribir algo como: myVelocity -= 10;
pero mi problema principal es que quiero que pierda menos velocidad cuanto mayor sea la velocidad inicial.
Por ejemplo: si la velocidad es 300, quiero que pierda 10 y si fuera 200, quiero que pierda 20.
¿Se puede hacer esto con algún tipo de fórmula?
mathematics
physics
Afra
fuente
fuente
log(myVelocity + 1) * N
?Respuestas:
Invertiría la velocidad y la multiplicaría por algo que te guste:
Este ejemplo da estos efectos:
fuente
los sistemas que usted y otros describen no generarán una física de aspecto real. la fórmula principal es disminuir 0.5 * m * v ^ 2 (energía cinemática) en un valor constante cada vez que el objeto golpea en alguna parte.
así que si un objeto con un peso de 2 kg golpea algún bloque, que necesita 16j de energía antes de romperse: la velocidad de movimiento del objeto cambiará de acuerdo con esta tabla:
fuente
Realmente no ha proporcionado suficiente información para saber qué tipo de rango desea, es decir, si está limitado, si desea progresión geométrica, etc.
Lo primero que debe hacer es obtener un número proporcional a la cantidad de velocidad que desea perder (no tiene que ser igual, pero debe disminuir a medida que aumenta la velocidad para que sea proporcional a su pérdida). La forma estándar de hacerlo es tomar el recíproco :
Ahora, para 100 tendrá 0.01, para 200 tendrá 0.005, para 300 tendrá 0.0033 y así sucesivamente.
Ahora solo necesita ajustar ese número a lo que realmente quiera, multiplicándolo. Entonces
le dará 20 por 300, pero le dará 15 por 200 en lugar de 10. Esto puede estar bien para usted, en ese caso no necesita leer más. Puede ajustar k como desee, pero es posible que no obtenga los números de la manera que lo desee a menos que haga un poco más, como implementar la progresión geométrica o cambiar la base para aumentar. No voy a entrar en progresiones geométricas aquí, pero si quieres cambiar la base, hazlo de la siguiente manera:
Esto le proporcionará el rango que solicitó originalmente en su pregunta, 300 -> pérdida de 10, 200 -> pérdida de 20. FYI 100 -> pérdida de 40 y 50 -> pérdida de 80 (!) Lo que significa que necesitaría restringir su resta, que es lo que hice en las líneas (1) y (2).
Hay otras formas de abordar este problema, por supuesto, que estoy seguro de que los más expertos matemáticamente que yo publicaremos aquí.
fuente
Creo que puedes usar la división simple por velocidad. Por ejemplo: perdido = 3 000 / myVelocity. Cuando la velocidad es 300, perderá 10, cuando sea 200, perderá 15. Depende de usted elegir las constantes correctas.
Si lo desea, puede usar fórmulas más complejas, como: constante / (constante2 * velocidad ^ 2 + constante3 * velocidad). Una vez más, solo elija constantes, que se adaptarán a usted.
fuente