Lorsque vous mettez en place des animations avec WPF, Surface ou même JavaFX vous avez certaines fois besoin de savoir comment évolue un angle.
Par exemple, vous avez en votre connaisance le nouvel angle d'un objet - sa nouvelle orientation - et vous connaisez l'ancienne valeur de cette orientation : comment calculer l'évolution de cet angle ?

(Cette ligne est l'orientation = 0°)
Une première solution
C'est très simple allez vous me dire, il suffit d'écrire :
Mais ce bout de code peut conduire à des erreurs !En effet, la valeur fournie par le système est relative à une certaine valeur et redémarre à 0° si on dépasse les 360°... Prenons un example : si l'objet était orienté à 358° et que l'utilisateur le tourne de 5° nous obtenons une différence de (3-358= -355° la ou nous souhaitons en fait obtenir 5° !
Une meilleure solution
La solution que je propose prend comme axiome de base que la méthode est appellée suffisamment fréquemment pour que lorsqie l'objet tourne, il n'a pas le temps de tourner plus d'un demi-tour (180°).
Partant de cela, nous pouvons considérer que la direction de la rotation est toujours le "chemin le plus court" : c'est le rasoin d'Ockham ! Si cela est plus court d'aller à gauche pour obtenir le nouvel angle alors nous choisisons le signe qui indique que la rotation s'est faite vers la gauche. Une image vaut mille mots :

(Dans ce schéma, la ligne noire correspond à l'angle initial et la ligne rouge au nouvel angle de l'objet)
Nous avons alors cette méthode :
Un cas d'utilisation
Oui, c'est bien beau mais à quoi cela nous sert ?
Cela nous est utile lorsque l'on construit un carousel : l'utilisateur peut cliquer sur un élément particulier et le carousel doit se tourner afin que cet élement soit en face de l'utilisateur. Il est alors nécessaire de connaitre ce bon angle. Je n'ai trouver aucun autre moyen de le faire !
Connaissez-vous une autre solution ?
(Article traduit de l'anglais depuis : http://blog.lexique-du-net.com )| < Précédent |
|---|





