Developpez.com

Le Club des Développeurs et IT Pro

Les interpolations et fonctions d'easing avec Lazarus VI - Les fonctions à base de fonctions trigonométriques

Un billet de Gilles Vasseur

Le 26/01/2019, par gvasseur58, Responsable Lazarus & Pascal
Continuons à explorer quelques fonctions utiles pour les fonctions d'easing que nous cherchons à implémenter.

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 :
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.
  Billet blog