On a vu rapidement le début de l'utilisation de la trigo dans les expressions dans AE.
voyons à présent une autre utilisation citée précédemment, l'oscillation.
Comme nous l'avons vu, quand une valeur évolue de manière linéaire, son cos et son sin oscillent entre -1 et 1. Je parle de valeur et non d'angle, car finalement, on se fiche qu'il s'agisse d'un angle ou pas. Un angle est une valeur, donc n'importe quelle valeur a son cos et son sin.
Alors voilà, nous voulons faire osciller un petit baton de droite à gauche, comme ceci :
On le comprend, la valeur de rotation ici correspond au cos (ou au sin) d'un angle qui évolue de manière linéaire. Nous allons donc créer la valeur d'un angle fictif :
cercle=Math.PI*2;
hop, on a crée un constante qui correspond au périmètre du cercle (c'est une bonne habitude pour etre précis dans ce qu'on fait) freq=2;
ça, ça va etre le nombre de tour à la seconde que fait notre angle.
amp=40;
ça, ça va etre l'amplitude non pas de cet angle, mais de celui que nous appliquerons au final au haricot bio.
Math.cos(time*cercle*freq)*amp
et ça, c'est la dernière phrase.
Dans le Math.cos, on a bien notre angle en radian qui évolue, qui effectue un tour de périmètre (cercle) tous les tours (time), multiplié par 2 (freq), le tout, multiplié par amp.
Attention !! amp multiplie bien l'ensemble du Math.cos, et non pas à l'interieur de la parenthèse. Souvenez vous, le cos et le sin n'évoluent que de -1 à 1. Avec le amp à 40, le haricot bio va de -40 à 40.
Maintenant, nous voulons que le haricot bio soit freiné par l'air, et s'arrète au bout d'un certain temps.
La base est exactement la meme, il va juste falloir que le Math.cos tende vers 0.
Il y a plein de moyens de faire ça. En gros, on veut un truc comme ça :
Math.cos(time*cercle*freq)*amp*DEC
On veut donc que DEC aille de 1 à 0. Il y a différente façon de faire ça, le control va s'effectuer sur la façon dont on va de 1 à 0.
On peut par exemple créer un paramètre glissière qu'on va faire varier de 1 à 0, en jouant sur la courbe pour avoir l'effet voulu.
Je le montre meme pas, vous savez le faire ça.
Je vous montre un autre moyen, avec Math.exp. Cette fonction ici est assez légitime, car comme vous le savez, b=Math.exp(a), avec a qui évolue linéairement, b augmente en accélérant.
On peut par exemple vouloir que la décélération soit de plus en plus rapide. En d'autre terme, plus le haricot sera lent, plus il est freiné :
cercle=Math.PI*2;
freq=4;
amp=80;
dec=Math.max(2-Math.exp(time/2.5),0);
Math.cos(time*cercle*freq)*amp*dec
voyons la ligne rouge.
On veut donc que dec aille de 1 à 0. On veut qu'il reste quelques temps autour de 1, puis que ça chute vers 0 accélère.
Math.exp(time) augmente de en accélérant. Pour rappelle, Math.exp(0)=1
donc 1-Math.exp(time) demarre à 0, et diminue en accélérant.
On veut partir de 1, donc :
2-Math.exp(time) demarre à 1, et diminue en accélérant.
On veut s'arrêter à 0, donc :
Math.max( 2-Math.exp(time) , 0 ) une fois que 2-Math.exp(time) passe sous 0, on reste à 0.
J'ai divisé time par 2.5 pour ralentir le freinage. Cette valeur peut biensur être un paramètre glissière pour etre réglable à souhait.
et voilà !!!
un exemple, ou les vitesses de vibration et de freinage sont en fonction de la taille de la boule, comme dans la vraie vie bio.
Inscription à :
Publier les commentaires (Atom)
Excellent blog !
RépondreSupprimerJe me poses des questions pratiques par rapport à cet article sur l'oscillation. Comment est-il possible de s'arrêter sur une valeur autre que 0 ? Si l'on applique cette méthode sur l'échelle d'une forme par exemple, comment peut-on terminer avec une échelle à 100% ?
La courbe monterait rapidement jusqu’à des valeurs proche de 100, oscillerait, avant de se stabiliser... Mais peut-être n'est ce pas la bonne méthode ?
Bonne soirée monsieur Saucisse.
Bonjour;
RépondreSupprimerJ'ai trouvé une solution à ma question ci-dessus avec l'article sur le sélecteur graphique, Youpi!
http://lefreelancesaucisse.blogspot.com/2011/06/selecteur-graphique.html
C'est tout de même fastidieux de dessiner une courbe qui ondoie.
Oulala, pas du tout, tu te compliques la vie pour rien.
RépondreSupprimerL'oscillation permet d'aller "à droite" et "à gauche" d'une valeur de façon symétrique. On peut ensuite y rajouter un décroissement de l'amplitude jusqu'à annuler l'oscillation, pour simuler un phénomène de friction. Donc ce principe n'est en rien lié au chiffre 0.
Il se trouve que dans mon cas on finit par 0 car DEC décroit jusqu'à 0, mais si tu as une expresssion du type:
VALEUR+Math.cos(angle)*amp*dec
Quand l'oscillation sera terminée, tu t’arrêteras sur VALEUR et non sur 0.