-*- coding: utf-8; fill-column: 72; -*- INTRODUCTION ------------ Pour les détails mathématiques voir mon article : PARAMÉTRISATION PAR LA (VARIATION ABSOLUE DE LA) DIRECTION DE DÉPLACEMENT disponible en PDF. Les explications ici se concentrent sur ce qui entre en jeu dans le fait de faire un GIF animé. Pour l'implémentation pratique voir : LISMOI-anim-pratique.txt THÉORIE ------- 1. Formule pour choix de ΔT est eta R/v avec R le rayon de courbure et v la vitesse ; cette dernière bien sûr suivant la paramétrisation initiale de la courbe. Cela veut dire que les points successifs obtenus sont censés approcher une densité locale sur la courbe proportionnelle à la courbure. Avec l'idée que c'est la bonne manière de fournir des points au mécanisme d'interpolation fait par PSTricks avec plotstyle=curve (ou cspline). Le paramètre eta, typiquement 0.1 semble a priori sans unité. Mais en fait ΔT n'a pas les dimensions d'un temps, c'est plutôt une unité d'image, et donc eta est en s^-1. Il est d'ailleurs plus commode de le considérer en rad/s (voir la suite). 1a. En utilisant la courbure k = 1/R, c'est eta / kv, et de toute façon comme on doit vérifier si la courbure est nulle, autant calculer d'abord le produit kv. Il a l'avantage d'être (v x a)/v^2 donc pas de racine carrée. Mais de toute façon avec le paramètre Vmax (voir plus loin) on est obligé d'avoir v = racine carrée de v^2 pour faire Vmax / v. 2. Dans le cadre d'une animation, si à chaque ΔT on fait une nouvelle image, le choix "ΔT = eta R/v" a pour effet qu'à chaque image le vecteur vitesse tourne d'environ eta radians (dans le mesure où pendant ce laps de temps on peut considérer que l'approximation par le cercle osculateur est fiable). Cela approxime une paramétrisation qui ferait tourner le vecteur vitesse à exactement eta radian par unité de temps, et on montre que module de la (nouvelle) vitesse est alors partout eta fois le rayon de courbure R. En effet on peut estimer qu'avec ce choix de ΔT, d'une image à l'autre le point se déplace de ΔP = v ΔT = eta R, ce qui signifie donc que sa vitesse V est eta R, par rapport à l'unité de temps séparant deux images. Numériquement ce V est donc aussi v ΔT. Parfois on doit modifier v ΔT car s'il est trop grand on a moins confiance de ne pas avoir rater un tournant de la courbe... Il y a un paramètre alpha qui joue ce rôle v ΔT ne doit pas dépasser alpha. A priori alpha représente une distance mais au final voit qu'il représente plutôt une vitesse Vmax (de même que eta qui semble sans unité devient en fait une vitesse angulaire en radians par image) mais le Vmax est à voir comme en unité de distance par image. L'unité de distance étant le cm pour les calculs de PSTricks, on visualise V et Vmax en cm/image. On voudrait représenter le vrai mouvement idéal qui aurait V exactement égal à eta R, mais cela devient infini aux points d'inflexions. Par manque ce chance on peut tomber exactement sur un point avec R infini, on peut aussi avoir R très grand, et le représenter graphiquement n'a pas de sens. Donc finalement c'est commode de représenter le vrai V choisi numériquement, que ce soit eta R ou alpha = Vmax, V = min(eta R, Vmax), et de ne pas chercher à tout prix à représenter celui de la paramétrisation idéale. Le ΔT étant donc ce V divisé par v, vitesse originelle de la paramétrisation. ΔT = min( eta R, Vmax ) / v Les unités de ΔT sont donc en "secondes" par image, la seconde ici étant celle de la paramétrisation initiale, ce n'est pas un temps physique mais un temps mathématique. Et puis ça veut dire que le V représenté correspond au déplacement du point sur l'écran. Bien que les zones avec V = Vmax passent très vite, puisque typiquement ça va être disons 2cm par image (l'unité de longueur pour les coordonnées PSTricks étant le centimètre), donc avec une fréquence typique de 10 images par seconde, ça fait 20cm/s, le vecteur vitesse devient plus grand que la taille de la figure (mais pas immensément plus grand), et dès qu'il dépasse la taille de la figure, c'est comme s'il était infini. (ce paragraphe anticipe sur l'item suivant) 3. Pour les GIF animés, l'intervalle entre deux images est obligatoirement un multiple entier Delay de la centième de seconde. Cela correspond au paramètre -delay de convert de ImageMagick. Le nombre d'images par seconde (frames per second, frame rate) est alors 100/Delay. %% You can specify a different scale for the time delay by specifying a 'x' %% scaling (giving in ticks per second). For example '10x1' is 10, 1 second %% ticks, while '10x100' is 10, one hundredth of a second ticks. %% Basically the 'x' is equivalent to a fraction '/' sign. For example if you %% specify '1x160' will set a delay that is appropriate for 160 frames per %% second. %% GIF animation delays must be specified in hundredths of a second for correct %% working, which is why that is the default time unit. The 'x' factor is used %% more for generating other more movie like formats, such a MNG's, and AVI's. Donc l'unité de temps est Delay/100 en secondes. Les vitesses du paragraphe précédent, que ce soit la vitesse angulaire de rotation du vecteur vitesse, ou son module, doivent être multipliées par 100/Delay (le Frame Rate), c'est surtout important pour le module puisqu'on le représente graphiquement : - 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 - pour l'accélération il y aurait le carré de ce facteur, mais on ne représentera que sa direction. ************ Le fait de faire une animation oblige donc à penser sérieusement aux dimensions des quantités manipulées. On fait trop facilement l'erreur, puisque que l'on parle de vitesse à propos du vecteur (x'(t),y'(t)), de lui assigner une réalité physique. Mais ici "t" est juste la variable mathématique paramétrisant initialement la courbe et n'a absolument aucun lien avec un temps physique. On pourrait décider que c'est le temps physique, mais tout notre procédé cherche un parcours canonique remarquable de la courbe avec une vitesse égale au rayon de courbure, donc c'est l'animation qui crée le vrai temps, uniquement après avoir fixé le Delay ou 100/Delay qui est le Frame Rate, le nombre d'images par (vraies) secondes. Pour eta, ce qui se passe aussi c'est qu'en fait on ne le distingue pas vraiment de 2 Arcsin(eta/2), donc parfois on le voit en radians par image, parfois en image^{-1}. Uniquement après avoir fixé le Delay, eta devient une véritable vitesse angulaire, correspond à la vitesse angulaire du mouvement de rotation de la tangente, sur l'écran de l'ordinateur, lorsque l'on représente un mouvement qui est une approximation du mouvement idéal. De même Vmax (aka alpha) est en fait en cm/image, et devient une vraie vitesse physique après avoir fixé le Frame Rate. ************