-*- coding: utf-8; fill-column: 72; -*- GÉNÉRALITÉS ----------- La courbe est en page 1 du PDF et servira de fond d'image. Les pages suivantes représenteront les positions successives du point mobile. - Le PDF est fait en classe standalone - Chaque pspicture a exactement les mêmes dimensions - Le GIF est produit par la commande convert de ImageMagick Les animations portent sur la représentation du point mobile, de son vecteur vitesse, et de la direction du vecteur accélération. Comme l'accélération est souvent assez grande, j'ai assez rapidement décidé de ne représenter que sa direction. Pour la courbe elle-même, j'ai utilisé également \listplot avec le choix des points fait par l'algorithme « ΔT = eta R/v », mais je réalise maintenant que j'aurais pu simplement la faire par \psparametricplot... En fait c'est tout-à-fait raisonnable de faire la courbe avec un eta, mais de représenter l'animation avec un eta plus petit surtout pour les courbes problèmatiques avec un virage serré immédiatement précédé et suivi par deux points d'inflexions.... Mais bref actuellement le code fait de toute façon deux fois les calculs des points : 1. pour la première page pour donner des points à \listplot et faire le tracé de la courbe, 2. pour les pages suivantes, chaque point est recalculé, car de toute façon il faut pour le calcul de la direction de l'accélération des étapes supplémentaires. Et on pourrait donc pour 2. utiliser un intervalle réduit du paramètre originel pour ne décrire qu'une portion de la courbe. On pourrait aussi utiliser pour 2. un eta deux fois plus petit mais ne représenter qu'un point sur deux. Cependant j'ai presque à chaque fois utilisé les mêmes points, mais donc en les recalculant et la seule information du premier calcul était le nombre total de points, comme cela on sait combien d'itérations faire et on évite un test sur la valeur du paramètre. UTILISATION DE LA COMMANDE convert ---------------------------------- Commande typique (une seule ligne si on retire le \): convert -verbose -density 150x150 -alpha remove -delay 0 anim-foo.pdf[0] \ -dispose previous -delay 10 anim-foo.pdf[1-1000] -loop 0 anim-foo.gif * -alpha remove : nécessaire lorsque la première image contient une légende avec du texte ; sans -alpha remove, ce texte devient moins lisible. * -loop 0 : en effet typiquement on représente des courbes fermées donc on veut que ça boucle ; malheureusement je ne sais pas du tout comment faire boucler pour revenir à la deuxième image. Donc j'ai aussi fait en deux étapes : - la page 1 donnant un PNG - les suivantes un GIF transparent Avec de l'html+CSS on peut alors positionner le GIF exactement sur le PNG et pour les courbes fermés il n'y a aucun tressautement lorsque ça boucle. Il ne faut pas utiliser -alpha remove alors. * [1-1000] : inutile de connaître exactement le nombre de pages * -density : On peut réduire par un facteur 2 la taille du fichier en utilisant - density 100x100. Mais ce facteur en sert qu'à fixer le nombre de pixels des images. Il donne le nombre de pixel par pouce -de l'image dans le PDF, sachant que PSTricks utilise le centimètre -comme unité, donc le point (1,0) est 1cm à droite de (0,0). Donc avec -density 75x75 l'image fait la moitié de la largeur et la moitié de la hauteur qu'avec -density 150x150. Je pense que -density 150x150 est trop mais mes gifs animés ont été produits avec, je ne recommence pas. * -delay 10 : ce paramètre est crucial, il donne en centièmes de seconde l'intervalle de temps entre deux images. C'est obligatoirement un entier. Au dessus de 20, l'animation est moins fluide. En dessous de 8, les fichiers sont gros car il y aura plus d'images. Donc typiquement ce paramètre est 10. Pour l'algorithme le paramètre fondamental est eta, typiquement 0.1 : \xintdefvar eta := 0.1; Avec ces deux données, la vitesse angulaire constante à laquelle va tourner le vecteur vitesse est donnée par la formule : - vitesse angulaire = eta rad/image * 100/delay image/s = eta * 100/delay en radians par seconde - module de la vitesse = V * 100/delay = min(Vmax, eta R) * 100/delay Il y a une troisième variable Vmax en cm/image qui indique le déplacement maximale du point mobile entre deux images et qui sert à gérer le problème de franchissement des points d'inflexions. Donc typiquement avec eta = 0.1, delay = 10 on a 1 rad/s. Si on veut 0.5 rad/s, on a une difficulté car delay = 20 donne un mouvement un peu saccadé. Il vaut mieux eta = 0.05, delay = 10, mais cela souvent rend la première étape le tracé de la courbe inutilement précis. C'est là où on aurait avantage à - soit faire le tracé de la courbe entièrement en PSTricks, sans \listplot, - soit faire le tracé de la courbe avec eta = 0.1 et ensuite représenter les points mobiles correspondants aux valeurs du paramètres calculées avec un eta = 0.05. Je recommande cela, mais mes fichiers sont faits, je ne recommence pas. (et puis dans certains j'ai fait cela déjà).