Je développe un jeu en Flash et j'ai besoin d'un peu d'aide. Cela peut être considéré comme un problème mathématique.
Mon objet vole avec vitesse X
et mon objet peut entrer en collision avec des pierres. Quand il entre en collision avec une pierre, j'ai besoin que mon objet brise la pierre et continue, mais avec moins de vitesse. Il est facile de le coder en dur et d'écrire quelque chose comme:, myVelocity -= 10;
mais mon principal problème est que je veux qu'il perde moins de vitesse plus la vitesse initiale est élevée.
Par exemple: si la vitesse est de 300, je veux qu'elle perde 10 et si elle était de 200, je veux qu'elle perde 20.
Cela peut-il être fait avec une sorte de formule?
mathematics
physics
Afra
la source
la source
log(myVelocity + 1) * N
?Réponses:
Je voudrais inverser la vitesse et multiplier par quelque chose que vous aimez:
Cet exemple donne ces effets:
la source
Ces systèmes que vous et d'autres décrivez ne généreront pas de physique réelle. la formule principale est de diminuer 0,5 * m * v ^ 2 (énergie cinématique) d'une valeur constante chaque fois qu'un objet frappe quelque part.
donc si un objet avec un poids 2Kg frappe un bloc, qui a besoin de 16j d'énergie avant de se casser: la vitesse de déplacement de l'objet changera selon ce tableau:
la source
Vous n'avez pas vraiment donné suffisamment d'informations pour dire quel type de plage vous voulez, c'est-à-dire s'il est plafonné, si vous voulez une progression géométrique, etc.
La première chose que vous voulez faire est de dériver un nombre proportionnel à la quantité de vitesse que vous voulez perdre (il ne doit pas nécessairement être le même, mais il devrait diminuer à mesure que la vitesse augmente pour le rendre proportionnel à votre perte). La manière standard de le faire est de prendre la réciproque :
Maintenant, pour 100, vous aurez 0,01, pour 200, vous aurez 0,005, pour 300, vous aurez 0,0033 et ainsi de suite.
Maintenant, il vous suffit d'ajuster ce nombre à tout ce que vous voulez vraiment, en le multipliant. Donc
vous donnera votre 20 pour 300, mais il vous en donnera 15 pour 200 plutôt que 10. Cela peut vous convenir, dans ce cas, vous n'avez pas besoin de lire plus loin. Vous pouvez ajuster k comme vous le souhaitez, mais vous n'obtiendrez peut-être pas les chiffres comme vous les aimez, sauf si vous en faites un peu plus, comme implémenter la progression géométrique ou modifier la base pour augmenter. Je ne vais pas entrer ici dans les progressions géométriques, mais si vous voulez changer la base, vous le faites comme suit:
Cela vous fournira la plage que vous aviez initialement demandée dans votre question, 300 -> perte de 10, 200 -> perte de 20. Pour info 100 -> perte de 40 et 50 -> perte de 80 (!) Ce qui signifie que vous aurais besoin de restreindre votre soustraction - ce que j'ai fait dans les lignes (1) et (2).
Il y a bien sûr d'autres façons d'aborder ce problème, que je suis sûr que ceux qui sont plus habiles mathématiquement que moi publieront ici.
la source
Je pense que vous pouvez utiliser une simple division par vitesse. Par exemple: perdu = 3 000 / myVelocity. Lorsque la vélocité est de 300, vous en perdrez 10, lorsqu'elle sera de 200, vous en perdrez 15. C'est à vous de choisir les constantes correctes.
Si vous le souhaitez, vous pouvez utiliser une formule plus complexe, comme: constante / (constante2 * vitesse ^ 2 + constante3 * vitesse). Encore une fois, choisissez simplement des constantes qui vous conviendront.
la source