
Les fonctions à base de fonctions sinusoïdales font appel, selon le besoin, au sinus ou au cosinus de la valeur en cours à appliquer au point d'arrivée. Le cosinus sera utilisé pour l'accélération positive alors que le sinus le sera pour la décélération.
En fait, ce qui est intéressant dans ces fonctions, c'est qu'elles sont périodiques (T = 2 * Pi). Dans l'intervalle entre - Pi et + Pi, elles prennent toutes les deux, avec un décalage de Pi / 2, des valeurs situées entre -1 et +1, ce qui correspond aux valeurs que nous cherchons pour nos interpolations !
Voici les fonctions telles que nous les définirons :
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | function TMainForm.EaseInSine(AStart, AChange, AStep: Single): Single; // *** INSINE *** begin Result := - AChange * cos(AStep / fDuration * Pi / 2) + AChange + AStart; end; function TMainForm.EaseOutSine(AStart, AChange, AStep: Single): Single; // *** OUTSINE *** begin Result := AChange * sin(AStep / fDuration * Pi / 2) + AStart; end; function TMainForm.EaseInOutSine(AStart, AChange, AStep: Single): Single; // *** INOUTSINE *** begin Result := - AChange / 2 * (cos(AStep / fDuration * Pi) - 1) + AStart; end; function TMainForm.EaseOutInSine(AStart, AChange, AStep: Single): Single; // *** OUTINSINE *** begin if AStep < fDuration / 2 then Result := EaseOutSine(AStart, AChange / 2, AStep * 2) else Result := EaseInSine(AStart + AChange / 2, AChange / 2, AStep * 2 - fDuration); end; |
Comme précédemment avec les fonctions à base de degrés de polynômes, nous n'avons prévu que trois paramètres en entrée, laissant la durée (fDuration) être gérée par l'application appelante.
Finalement, ces fonctions ne diffèrent guère dans leur forme des fonctions déjà implémentées : les puissances ont cédé la place aux fonctions trigonométriques, voilà tout ! Nous verrons, à quelques détails près qui tiennent à des valeurs exclues pour certaines fonctions ou à certaines singularités des effets désirés, que notre schéma de départ est applicable la plupart du temps.