Avant de voir la trigonométrie, on va voir quelque chose d'autre avant, rapidement, le changement de référentiel. Ça à l'air horrible comme ça comme phrase, mais en fait, c'est bien, et dans certains cas, on ne peut pas faire sans.
Et quand on peut pas faire ça, bah faut faire avec.
Ça sera pour la fin de semaine, l'année prochaine donc (ça s'est pour pour préparer aux gens qui vont vous dire "hey à l'année prochaine !" demain soir...
mardi 30 décembre 2008
mercredi 10 décembre 2008
bientot dans vos salles
Je reviens bientot pour expliquer comment la trigonométrie c'est trop bien.
Et si vous êtes sages, quand vous aurez bien tout appris votre trigo de la classe de 4eme (et un peu aussi de la 2nd je crois...), on verra ensemble comment remédier à un petit manque dans after effect, la gestion de la cinématique inverse ! (je bouge la main, le bras et l'avant bras suivent)
Mais avant, va falloir piger un certain nombre de choses...
Et si vous êtes sages, quand vous aurez bien tout appris votre trigo de la classe de 4eme (et un peu aussi de la 2nd je crois...), on verra ensemble comment remédier à un petit manque dans after effect, la gestion de la cinématique inverse ! (je bouge la main, le bras et l'avant bras suivent)
Mais avant, va falloir piger un certain nombre de choses...
jeudi 13 mars 2008
EXPRESSIONS : gestion d'une couleur
Parfois, on peut avoir une composition avec plusieurs calques texte ayant la même couleur.
Si on veut changer la couleur des textes, à priori, il faut modifier la couleur dans chaque calque texte, surtout si les calques sont éparpillés sur la pile des calques de la timeline (empêchant l'utilisation d'un calque de réglage pour modifier l'ensemble des calques textes).
Il existe plusieurs solutions, en voici une très simple utilisant les expressions.
Créez un calque null, avec un effet "paramètre couleur", dans le même menu que le paramètre glissière.
Ouvrez le menu du texte dans la timeline, cliquez sur "animer", et créer un mini menu en cliquant sur "fond du tracé", "RVB". Ainsi, vous pouvez changer la couleur de votre texte de la timeline, et non plus uniquement du panneau "caractère".
Ensuite, il ne vous reste plus qu'à créer une expression pour la couleur en l'accrochant à la couleur de l'effet "paramètre couleur" du Null, et de faire ça avec chaque calque.

Voilà, vous pouvez contrôler la couleur de plusieurs calques avec un seul.
Si on veut changer la couleur des textes, à priori, il faut modifier la couleur dans chaque calque texte, surtout si les calques sont éparpillés sur la pile des calques de la timeline (empêchant l'utilisation d'un calque de réglage pour modifier l'ensemble des calques textes).
Il existe plusieurs solutions, en voici une très simple utilisant les expressions.
Créez un calque null, avec un effet "paramètre couleur", dans le même menu que le paramètre glissière.
Ouvrez le menu du texte dans la timeline, cliquez sur "animer", et créer un mini menu en cliquant sur "fond du tracé", "RVB". Ainsi, vous pouvez changer la couleur de votre texte de la timeline, et non plus uniquement du panneau "caractère".
Ensuite, il ne vous reste plus qu'à créer une expression pour la couleur en l'accrochant à la couleur de l'effet "paramètre couleur" du Null, et de faire ça avec chaque calque.
Voilà, vous pouvez contrôler la couleur de plusieurs calques avec un seul.
dimanche 9 mars 2008
EXPRESSIONS: selection de calque
Un petit post qui vous donnera un outil puissant dans AE. Une nouvelle façon de selectionner un calque dans une expression.
Pour le moment, nous n'avons vu qu'une seule façon:
thisComp.layer("target").blablabla
On demandait à AE d'aller voir dans cette même composition un calque nommé "target".
Il y a une autre façon de cibler un calque:
"Va cherche la position du calque qui est juste au dessus de moi s'il te plait."
Oui oui, c'est possible, voilà comment:
thisComp.layer(thisLayer, -1)
On demande donc à AE de cibler le calque qui a un index inférieur d'un point à celui dans laquelle est écrite l'expression.
thisComp.layer(thisLayer, +2), et là c'est le calque qui est en dessous de 2 niveaux.
Le chiffre peut également être une variable comme nous le verrons plus tard.
Quel intérêt à tout ça?
L'intérêt est énorme en terme d'automatisation, nous l'utiliserons très souvent, et voilà pourquoi:
Prenons l'exemple tout frais du reflet. Imaginez que vous avez (et ce sera surement le cas) plusieurs calques dont vous voulez le reflet dans le sol. Vous allez donc créer un clone de chaque calque.
Logiquement, vous copiez l'expression de position du votre premier reflet dans la position d'un autre futur reflet. Et pouf, ça ne marche pas comme vous voudriez. Pourquoi ? Car l'expression originale cible le calque "premier mot" alors que ce deuxième reflet devrait faire appel au calque "deuxième mot".
Et là, vous vous rendez compte que vous allez devoir changer plus ou moins à la main toutes les variables "calque machin" pour chaque expression et chaque reflet... Insupportable si tout cela concerne 50 calques.
C'est là que notre nouveau joujou intervient.
Plutôt que d'écrire:
P=thisComp.layer("calque 1").position;
on va donc écrire:
P=thisComp.layer(thisLayer,-1);
Et pareil pour toutes les variables faisant appel au calque reflété. La condition est évidemment de mettre le reflet juste en dessous de son modèle. il ira toujours chercher les variables dans le calque au dessus de lui.
Ainsi, si chacun de vos reflets est en dessous de son modèle, vous pourrez copier/coller toutes les expressions que vous voulez, chaque reflet se comportera parfaitement.
Encore un pas vers l'automatisation!
Pour le moment, nous n'avons vu qu'une seule façon:
thisComp.layer("target").blablabla
On demandait à AE d'aller voir dans cette même composition un calque nommé "target".
Il y a une autre façon de cibler un calque:
"Va cherche la position du calque qui est juste au dessus de moi s'il te plait."
Oui oui, c'est possible, voilà comment:
thisComp.layer(thisLayer, -1)
On demande donc à AE de cibler le calque qui a un index inférieur d'un point à celui dans laquelle est écrite l'expression.
thisComp.layer(thisLayer, +2), et là c'est le calque qui est en dessous de 2 niveaux.
Le chiffre peut également être une variable comme nous le verrons plus tard.
Quel intérêt à tout ça?
L'intérêt est énorme en terme d'automatisation, nous l'utiliserons très souvent, et voilà pourquoi:
Prenons l'exemple tout frais du reflet. Imaginez que vous avez (et ce sera surement le cas) plusieurs calques dont vous voulez le reflet dans le sol. Vous allez donc créer un clone de chaque calque.
Logiquement, vous copiez l'expression de position du votre premier reflet dans la position d'un autre futur reflet. Et pouf, ça ne marche pas comme vous voudriez. Pourquoi ? Car l'expression originale cible le calque "premier mot" alors que ce deuxième reflet devrait faire appel au calque "deuxième mot".
Et là, vous vous rendez compte que vous allez devoir changer plus ou moins à la main toutes les variables "calque machin" pour chaque expression et chaque reflet... Insupportable si tout cela concerne 50 calques.
C'est là que notre nouveau joujou intervient.
Plutôt que d'écrire:
P=thisComp.layer("calque 1").position;
on va donc écrire:
P=thisComp.layer(thisLayer,-1);
Et pareil pour toutes les variables faisant appel au calque reflété. La condition est évidemment de mettre le reflet juste en dessous de son modèle. il ira toujours chercher les variables dans le calque au dessus de lui.
Ainsi, si chacun de vos reflets est en dessous de son modèle, vous pourrez copier/coller toutes les expressions que vous voulez, chaque reflet se comportera parfaitement.
Encore un pas vers l'automatisation!
mercredi 5 mars 2008
EXPRESSIONS: les reflets
Un peu de concret ce coup-ci, la gestion des reflets dans AE. Il s'agit évidemment d'une suite d'astuces, étant donné que les réflections dans AE ne sont pas gérées.
Le sujet est déjà traité ici et là sur internet, mais nous allons intégrer les expressions pour automatiser le tout.
Commençons avec une scène simple, un sol bien grand, et un mot, les deux en 3d.
Evidemment, le sol est horizontal, le mot est vertical.

Déjà, voyons comment créer un reflet. L'astuce est simple, on duplique le calque. Pour qu'il soit un reflet, il faut qu'on le mette en "miroir". Pour cela, plusieurs possibilités. Nous allons en choisir une et s'y tenir, car la suite sera en fonction de ce choix.
On peut par exemple inverser l'échelle sur Y (en décochant l'échelle uniforme), ou bien mettre 180 dans l orientation sur x (et non la rotation). Optons pour l'échelle sur Y à -100. Ensuite, on recoche "échelle uniforme"
Faites descendre votre reflet plus bas, et là, hop, il disparait sous le sol. Logique, puisque sa position sur Y devient plus basse que le sol. Pour régler ce premier problème, une astuce existe.
Créez une calque d'effet juste au dessus du sol. Ainsi, meme si un calque passe sous le sol, il restera entierement visible du moment qu'il reste au dessus du sol dans la pile des calques.
Ca, c'est fait.
Maintenant, automatisons le tout. Nous voulons deja que le reflet s'éloigne du sol vers le bas d'autant que la distance entre le sol et le mot.
On doit donc creer une variable qui définit la distance L entre le sol et le mot, et demander à ce que le reflet ait une position en Y telle que sol+L (et non sol-L, car Y augmente vers le bas):
sol=comp("Composition 1").layer("sol").transform.position[1]; // hauteur du sol
P=thisComp.layer("mot").transform.position; // position du texte
distance=Math.abs(sol-P[1]) // distance entre le sol et le texte
x=P[0]; // meme position sur x que le texte
y=sol+distance;
z=P[2]; // meme position sur la profondeur que le texte
[x , y , z ]
Je ne m'étends pas 4h sur ces quelques lignes simplissimes:
sol est la position du sol sur Y, P la position du mot.
Le reflet doit avoir la meme position que le mot sur X.
Pour la distance, on soustrait la position du sol au mot, ou l'inverse, qu'importe puisqu'on utilise Math.abs qui en ressort la valeur absolue, c'est à dire positive.
Et oui, souvenez vous,
Math.abs(5)=5
Math.abs(-5)=5
Donc Math.abs(10-3) = Math.abs(3-10)=7
Donc, Y=sol+distance
Et pour Z, c'est la meme chose que pour X, mais dans l'autre dimension (la profondeur)
voilà pour la position.
Au final, le reflet devrait suivre le modèle sur x et z, y devant etre inversé puisqu'il correspond à la distance objet-sol
Faites bouger votre mot dans sur les 3 axes, le reflet se comporte parfaitement.
Passons aux rotations.
C'est ici que le choix de la solution miroir influence la suite. On a ici opté pour l'échelle de -100 sur Y.
on a donc ceci:
pour la rotation sur X:
thisComp.layer("mot").transform.xRotation*-1
pour la rotation sur Y:
thisComp.layer("mot").transform.yRotation
pour la rotation sur Z:
thisComp.layer("mot").transform.zRotation*-1
En fait, il n'y a que 2 possibilités. Ou l'angle est le meme, ou bien c'est l'angle inverse ( *-1). Donc si vous optez pour un miroir avec l'orientation sur x de -180, ça sera l'inverse de tout ça.
De toute façon, il suffit de tester, et on se rend vite compte si c'est bon ou pas.
Si on veut aussi automatiser l'échelle, c'est tres simple, surtout avec le miroir fait avec -180 dans l'orientation sur x, il suffit de copier l'échelle du modèle.
Pour le cas où le miroir fait avec l'échelle de -100 sur Y, on écrira ceci:
s=thisComp.layer("mot").transform.scale;
[s[0] , s[1]*-1, s[2] ]
On inverse donc juste Y.
Voilà, toutes les transformations sont faites. Occupons nous de la transparence.

Le reflet doit évidemment etre moins dense que le modèle.
On veut faire en sorte que plus le modèle est loin du sol, plus le reflet est transparent. Nous allons donc utiliser la fonction linear. Bravo à ceux qui ont deviné.
imaginons qu'on veuille que l'opacité aille de 0 à 50:
sol=comp("Composition 1").layer("sol").transform.position[1]; // hauteur du sol
P=thisComp.layer("mot").transform.position; // position du texte
t=transform.opacity; //valeur de l'opacité
distance=Math.abs(sol-P[1]); // distance entre le sol et le texte
linear(distance, 10 , 60 ,t, 0 )
Voilà, c'est pas bien compliqué. Juste une petite précision pour l'utilisation de l'opacité du calque.
Certains pourraient se dire ceci: comment est il possible de creer la variable t=transform.opacity alors que c'est cette meme variable que toute l'expression modifie ?
C'est tres simple, souvenez vous, AE lit d'abord la valeur, puis l'expression, et utilise la valeur créée par l'expression. De la meme maniere, on peut creer dans la position une expression du type position + [3,5] . Vous pourrez bouger votre calque; une fois votre calque placé, AE rajouter 3 et 5 à la position.
Pour en revenir à nos moutons, il ne vous reste donc plus qu'à entrer 50 dans l'opacité du reflet. Ainsi, 50 sera l'opacité maximum utilisée, jusqu'à ce que le mot soit à plus de 10 pixels du sol. Les valeurs de 10,60,50 et 0 sont ici arbitraire, vous mettez ce que vous voulez selon votre scène.
Affinons le tout avec un flou dans le reflet. Plus le mot est loin du sol, plus le reflet est flou, à la façon d'un sol légèrement dépoli. C'est exactement le meme principe que pour l'opacité. On rajoute un flou gaussien, ou directionnel au reflet et dans le rayon:
sol=comp("Composition 1").layer("sol").transform.position[1]; // hauteur du sol
P=thisComp.layer("mot").transform.position; // position du texte
distance=Math.abs(sol-P[1]); // distance entre le sol et le texte
ease(distance, 10 , 60 , 2 , 20 )

Sans commentaire.
Voilà un exemple simple. Ca a été un peu long, mais quand on regarde le tout, c'est en fait très rapide à mettre en oeuvre.
Si vous avez plusieurs objet à refléter dans votre scène, n'oubliez pas de creer une variable générale pour l'opacité et le flou des réflections, avec par exemple un Null et 4 paramètres glissière du type:
Opmin
Opmax
Floumin
Floumax
et de les intégrer dans vos expressions, ainsi, vous pourrez tout gérer en meme temps, sans avoir à revenir dans chaque calque en cas de modification. On peut aussi rajouter des paramètres de distance du modèle au sol, etc.
voilà voilà, bonne réflection.
Le sujet est déjà traité ici et là sur internet, mais nous allons intégrer les expressions pour automatiser le tout.
Commençons avec une scène simple, un sol bien grand, et un mot, les deux en 3d.
Evidemment, le sol est horizontal, le mot est vertical.
Déjà, voyons comment créer un reflet. L'astuce est simple, on duplique le calque. Pour qu'il soit un reflet, il faut qu'on le mette en "miroir". Pour cela, plusieurs possibilités. Nous allons en choisir une et s'y tenir, car la suite sera en fonction de ce choix.
On peut par exemple inverser l'échelle sur Y (en décochant l'échelle uniforme), ou bien mettre 180 dans l orientation sur x (et non la rotation). Optons pour l'échelle sur Y à -100. Ensuite, on recoche "échelle uniforme"
Faites descendre votre reflet plus bas, et là, hop, il disparait sous le sol. Logique, puisque sa position sur Y devient plus basse que le sol. Pour régler ce premier problème, une astuce existe.
Créez une calque d'effet juste au dessus du sol. Ainsi, meme si un calque passe sous le sol, il restera entierement visible du moment qu'il reste au dessus du sol dans la pile des calques.
Ca, c'est fait.
Maintenant, automatisons le tout. Nous voulons deja que le reflet s'éloigne du sol vers le bas d'autant que la distance entre le sol et le mot.
On doit donc creer une variable qui définit la distance L entre le sol et le mot, et demander à ce que le reflet ait une position en Y telle que sol+L (et non sol-L, car Y augmente vers le bas):
sol=comp("Composition 1").layer("sol").transform.position[1]; // hauteur du sol
P=thisComp.layer("mot").transform.position; // position du texte
distance=Math.abs(sol-P[1]) // distance entre le sol et le texte
x=P[0]; // meme position sur x que le texte
y=sol+distance;
z=P[2]; // meme position sur la profondeur que le texte
[x , y , z ]
Je ne m'étends pas 4h sur ces quelques lignes simplissimes:
sol est la position du sol sur Y, P la position du mot.
Le reflet doit avoir la meme position que le mot sur X.
Pour la distance, on soustrait la position du sol au mot, ou l'inverse, qu'importe puisqu'on utilise Math.abs qui en ressort la valeur absolue, c'est à dire positive.
Et oui, souvenez vous,
Math.abs(5)=5
Math.abs(-5)=5
Donc Math.abs(10-3) = Math.abs(3-10)=7
Donc, Y=sol+distance
Et pour Z, c'est la meme chose que pour X, mais dans l'autre dimension (la profondeur)
voilà pour la position.
Au final, le reflet devrait suivre le modèle sur x et z, y devant etre inversé puisqu'il correspond à la distance objet-sol
Faites bouger votre mot dans sur les 3 axes, le reflet se comporte parfaitement.
Passons aux rotations.
C'est ici que le choix de la solution miroir influence la suite. On a ici opté pour l'échelle de -100 sur Y.
on a donc ceci:
pour la rotation sur X:
thisComp.layer("mot").transform.xRotation*-1
pour la rotation sur Y:
thisComp.layer("mot").transform.yRotation
pour la rotation sur Z:
thisComp.layer("mot").transform.zRotation*-1
En fait, il n'y a que 2 possibilités. Ou l'angle est le meme, ou bien c'est l'angle inverse ( *-1). Donc si vous optez pour un miroir avec l'orientation sur x de -180, ça sera l'inverse de tout ça.
De toute façon, il suffit de tester, et on se rend vite compte si c'est bon ou pas.
Si on veut aussi automatiser l'échelle, c'est tres simple, surtout avec le miroir fait avec -180 dans l'orientation sur x, il suffit de copier l'échelle du modèle.
Pour le cas où le miroir fait avec l'échelle de -100 sur Y, on écrira ceci:
s=thisComp.layer("mot").transform.scale;
[s[0] , s[1]*-1, s[2] ]
On inverse donc juste Y.
Voilà, toutes les transformations sont faites. Occupons nous de la transparence.
Le reflet doit évidemment etre moins dense que le modèle.
On veut faire en sorte que plus le modèle est loin du sol, plus le reflet est transparent. Nous allons donc utiliser la fonction linear. Bravo à ceux qui ont deviné.
imaginons qu'on veuille que l'opacité aille de 0 à 50:
sol=comp("Composition 1").layer("sol").transform.position[1]; // hauteur du sol
P=thisComp.layer("mot").transform.position; // position du texte
t=transform.opacity; //valeur de l'opacité
distance=Math.abs(sol-P[1]); // distance entre le sol et le texte
linear(distance, 10 , 60 ,t, 0 )
Voilà, c'est pas bien compliqué. Juste une petite précision pour l'utilisation de l'opacité du calque.
Certains pourraient se dire ceci: comment est il possible de creer la variable t=transform.opacity alors que c'est cette meme variable que toute l'expression modifie ?
C'est tres simple, souvenez vous, AE lit d'abord la valeur, puis l'expression, et utilise la valeur créée par l'expression. De la meme maniere, on peut creer dans la position une expression du type position + [3,5] . Vous pourrez bouger votre calque; une fois votre calque placé, AE rajouter 3 et 5 à la position.
Pour en revenir à nos moutons, il ne vous reste donc plus qu'à entrer 50 dans l'opacité du reflet. Ainsi, 50 sera l'opacité maximum utilisée, jusqu'à ce que le mot soit à plus de 10 pixels du sol. Les valeurs de 10,60,50 et 0 sont ici arbitraire, vous mettez ce que vous voulez selon votre scène.
Affinons le tout avec un flou dans le reflet. Plus le mot est loin du sol, plus le reflet est flou, à la façon d'un sol légèrement dépoli. C'est exactement le meme principe que pour l'opacité. On rajoute un flou gaussien, ou directionnel au reflet et dans le rayon:
sol=comp("Composition 1").layer("sol").transform.position[1]; // hauteur du sol
P=thisComp.layer("mot").transform.position; // position du texte
distance=Math.abs(sol-P[1]); // distance entre le sol et le texte
ease(distance, 10 , 60 , 2 , 20 )
Sans commentaire.
Voilà un exemple simple. Ca a été un peu long, mais quand on regarde le tout, c'est en fait très rapide à mettre en oeuvre.
Si vous avez plusieurs objet à refléter dans votre scène, n'oubliez pas de creer une variable générale pour l'opacité et le flou des réflections, avec par exemple un Null et 4 paramètres glissière du type:
Opmin
Opmax
Floumin
Floumax
et de les intégrer dans vos expressions, ainsi, vous pourrez tout gérer en meme temps, sans avoir à revenir dans chaque calque en cas de modification. On peut aussi rajouter des paramètres de distance du modèle au sol, etc.
voilà voilà, bonne réflection.
vendredi 25 janvier 2008
PARTICULAR : anti-clone
Petite astuce avec Particular, le plugin de Trapcode largement utilisé comme simulateur de particules pour AE.
Particular propose en interne une petite liste de type de particules, comme smoke, sphere, star... Et vous permet également d'utiliser un de vos calques comme particule.
Voilà comment demander à particular d'utiliser plusieurs calques différents, en en choisissant un au hasard à la création de chaque nouvelle particule.
Créez une composition, pas trop grande sinon votre machine va gueuler (200x200 c'est deja pas mal), et placez à la chaine tous les calques que vous voulez utiliser dans particular. Chaque calque ne doit durer qu'une seule image, la composition doit donc durer le temps d'affichage de chaque image (si vous avez 10 calques, votre compo doit avoir une durée de 10 images, et donc finir par 00:09 car 00:00 existe oui oui)
Placez cette compo au début de la compo contenant le calque particular (et masquez la bien évidemment). Comme type de particule, mettez "custom", choisissez la compo créée, et dans "time sampling", utilisez "random - still frame".
Ainsi, particular choisira à chaque fois une image différente, et s'y tiendra pour chaque particule.
Pratique pour avoir des particules toutes différentes, ou bien une légère différence entre chacune pour éviter l'effet clone.
Allez, faites tomber de jolies feuilles mortes de toutes les formes de la vie, faites voler les bonbons...
Particular propose en interne une petite liste de type de particules, comme smoke, sphere, star... Et vous permet également d'utiliser un de vos calques comme particule.
Voilà comment demander à particular d'utiliser plusieurs calques différents, en en choisissant un au hasard à la création de chaque nouvelle particule.
Créez une composition, pas trop grande sinon votre machine va gueuler (200x200 c'est deja pas mal), et placez à la chaine tous les calques que vous voulez utiliser dans particular. Chaque calque ne doit durer qu'une seule image, la composition doit donc durer le temps d'affichage de chaque image (si vous avez 10 calques, votre compo doit avoir une durée de 10 images, et donc finir par 00:09 car 00:00 existe oui oui)
Placez cette compo au début de la compo contenant le calque particular (et masquez la bien évidemment). Comme type de particule, mettez "custom", choisissez la compo créée, et dans "time sampling", utilisez "random - still frame".
Ainsi, particular choisira à chaque fois une image différente, et s'y tiendra pour chaque particule.
Pratique pour avoir des particules toutes différentes, ou bien une légère différence entre chacune pour éviter l'effet clone.
Allez, faites tomber de jolies feuilles mortes de toutes les formes de la vie, faites voler les bonbons...
mercredi 23 janvier 2008
EXPRESSSIONS : Math
j'y viens au fur et à mesure, pas trop vite non plus, mais je vais être obligé d'intégrer au fur et à mesure quelques notions de mathématiques, promis, des simples.
Ici, je vais détailler les différentes façon d'altérer un chiffre avec les fonctions Math.
Il y e en a presque 25, nous allons voir les principales ensemble. J'y consacre un post entier plutot que de faire de longues parenthèses lors des prochains posts où ces fonctions seront très souvent utilisées.
La synthaxe est toujours la meme, à savoir : Math.truc (x)
truc n'a pas de majuscule puisqu'un point le précède.
---------------------------------------------------------------------------
Math.abs (x): donne la valeur absolue du nombre, c'est à dire sa valeur positive.
exemple:
Math.abs (5) = 5
Math.abs (-6) = 6
Imaginons une variable X qui aille de 20 à -10. Math.abs(X) partira à 20, s'arretera à 0, et repartira vers 10.
---------------------------------------------------------------------------
Math.floor (x): donnc la valeur entière inférieure au nombre.
exemple:
Math.floor (5.35) = 5
Math.floor (0.95)= 0
Math.ceil (x): donne la valeur entière supérieure au nombre.
exemple:
Math.ceil (5.35) = 6
Math.ceil (0.95)= 1
Math.round (x): donne la valeur entière la plus proche du nombre
exemple:
Math.round (5.35) = 5
Math.round (0.95)= 1
Math.round (0.5)=1
Ces trois fonctions sont souvent utilisées pour avoir des nombres qui augmentent comme un escalier par exemple.
Math.flour (time) prendra succéssivement les valeurs 0 1 2 3 4 uniquement à chaque nouvelle seconde.
Dans la timeline, à coté du dieze des expressions, il y a un petit graphique. Activez le pour observer ce que crée l'expressions en terme de courbe (quand vous l'activez également dans la timeline en général)
---------------------------------------------------------------------------
Math.min (x,y): donne la plus petite valeur entre x et y. Evidemment, ça ne sert que lorsque x et/ou y varie(nt).
Math.max(x,y): donne la plus grande valeur entre x et y.
par exemple, Math.min(5,time) vaudra de 0 à 5 entre le début de la compo et la 5eme seconde, puis sera toujours égale à 5 ensuite, étant donné que time vaudra plus que 5.
Ces deux fonctions permettent donc de mettre un plancher ou un plafond à une valeur, c'est très utile.
Math.min ( 5 , time ) et Math.min ( time , 5 ) sont strictement identiques.
---------------------------------------------------------------------------
Math.PI : lui ne modifie pas une valeur, mais contient la valeur de PI ( 3.14machin )
---------------------------------------------------------------------------
Math.pow (x,y): crée la valeur x puissance y.
exemples:
Math.pow(5 , 2)=25
Math.pow(2 , time ) augmente à une vitesse considérable !
---------------------------------------------------------------------------
Math.exp (x): donne l'exponentiel du nombre. En gros, cela donne une valeur qui augmente très vite en démarrant lentement (un peu à la manière d'une valeur au carré).
exemples:
Math.exp (.5)=2
Math.exp (3)=20
Math.exp (40)=326901
Si si, on s'en sert très souvent, par exemple :
Math.min ( Math.exp ( time ) , 5 ) n'ira pas plus haut que 5.
A noter que pour un soucis de clareté, si on a pas créé de variable pour Math.exp(time) genre :
x=Math.exp(time);
Math.min ( x , 5)
On peut aussi écrire ceci:
Math.min (
Math.exp ( time )
,
5 )
Ainsi, chaque élément est sur ligne différente, beaucoup plus lisible.
---------------------------------------------------------------------------
Il en existe d'autre, nous les verrons plus tard.
Je ferai surtout un chapitre bien à part en ce qui concerne:
Math.cos
Math.sin
Math.tan
Math.acos
Math.asin
Math.atan
Math.atan2
Et oui, vous n'allez pas échapper à la trigonométrie, mais quand vous aurez vu ce que l'on peut en faire, vous vous demanderez comment vous avez pu animer quoi que ce soit sans ces outils.
Ici, je vais détailler les différentes façon d'altérer un chiffre avec les fonctions Math.
Il y e en a presque 25, nous allons voir les principales ensemble. J'y consacre un post entier plutot que de faire de longues parenthèses lors des prochains posts où ces fonctions seront très souvent utilisées.
La synthaxe est toujours la meme, à savoir : Math.truc (x)
truc n'a pas de majuscule puisqu'un point le précède.
---------------------------------------------------------------------------
Math.abs (x): donne la valeur absolue du nombre, c'est à dire sa valeur positive.
exemple:
Math.abs (5) = 5
Math.abs (-6) = 6
Imaginons une variable X qui aille de 20 à -10. Math.abs(X) partira à 20, s'arretera à 0, et repartira vers 10.
---------------------------------------------------------------------------
Math.floor (x): donnc la valeur entière inférieure au nombre.
exemple:
Math.floor (5.35) = 5
Math.floor (0.95)= 0
Math.ceil (x): donne la valeur entière supérieure au nombre.
exemple:
Math.ceil (5.35) = 6
Math.ceil (0.95)= 1
Math.round (x): donne la valeur entière la plus proche du nombre
exemple:
Math.round (5.35) = 5
Math.round (0.95)= 1
Math.round (0.5)=1
Ces trois fonctions sont souvent utilisées pour avoir des nombres qui augmentent comme un escalier par exemple.
Math.flour (time) prendra succéssivement les valeurs 0 1 2 3 4 uniquement à chaque nouvelle seconde.
Dans la timeline, à coté du dieze des expressions, il y a un petit graphique. Activez le pour observer ce que crée l'expressions en terme de courbe (quand vous l'activez également dans la timeline en général)
---------------------------------------------------------------------------
Math.min (x,y): donne la plus petite valeur entre x et y. Evidemment, ça ne sert que lorsque x et/ou y varie(nt).
Math.max(x,y): donne la plus grande valeur entre x et y.
par exemple, Math.min(5,time) vaudra de 0 à 5 entre le début de la compo et la 5eme seconde, puis sera toujours égale à 5 ensuite, étant donné que time vaudra plus que 5.
Ces deux fonctions permettent donc de mettre un plancher ou un plafond à une valeur, c'est très utile.
Math.min ( 5 , time ) et Math.min ( time , 5 ) sont strictement identiques.
---------------------------------------------------------------------------
Math.PI : lui ne modifie pas une valeur, mais contient la valeur de PI ( 3.14machin )
---------------------------------------------------------------------------
Math.pow (x,y): crée la valeur x puissance y.
exemples:
Math.pow(5 , 2)=25
Math.pow(2 , time ) augmente à une vitesse considérable !
---------------------------------------------------------------------------
Math.exp (x): donne l'exponentiel du nombre. En gros, cela donne une valeur qui augmente très vite en démarrant lentement (un peu à la manière d'une valeur au carré).
exemples:
Math.exp (.5)=2
Math.exp (3)=20
Math.exp (40)=326901
Si si, on s'en sert très souvent, par exemple :
Math.min ( Math.exp ( time ) , 5 ) n'ira pas plus haut que 5.
A noter que pour un soucis de clareté, si on a pas créé de variable pour Math.exp(time) genre :
x=Math.exp(time);
Math.min ( x , 5)
On peut aussi écrire ceci:
Math.min (
Math.exp ( time )
,
5 )
Ainsi, chaque élément est sur ligne différente, beaucoup plus lisible.
---------------------------------------------------------------------------
Il en existe d'autre, nous les verrons plus tard.
Je ferai surtout un chapitre bien à part en ce qui concerne:
Math.cos
Math.sin
Math.tan
Math.acos
Math.asin
Math.atan
Math.atan2
Et oui, vous n'allez pas échapper à la trigonométrie, mais quand vous aurez vu ce que l'on peut en faire, vous vous demanderez comment vous avez pu animer quoi que ce soit sans ces outils.
Inscription à :
Articles (Atom)