IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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

Le , par gvasseur58

0PARTAGES

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

Une erreur dans cette actualité ? Signalez-nous-la !