2017-08-28 5 views
0

J'essaie d'écrire une expression dans After Effects, pour afficher les degrés de rotation d'un objet. Le problème est que, lorsque l'élément est tourné dans le sens inverse des aiguilles d'une montre, il ne commence pas à 360 et va compter jusqu'à 0. Il me montrera des nombres négatifs de 0 à - infini négatif.Comment calculer la rotation de 0 à 360?

Lorsque vous tournez dans le sens des aiguilles d'une montre, il commencera à partir de 0 et après avoir passé le 360, il recommencera depuis 0.

Comment résoudre la rotation dans le sens contraire des aiguilles d'une montre?

x = Math.floor(thisComp.layer("Ellipse 2").transform.rotation) 


if (x >= 0) x + "°" 
if (x >= 360) x%360 + "°" 

Le code est appliqué sur une couche de texte qui affiche le degré correct de l'élément « Ellipse 2 ».

+0

'if (x <0) x = x% 360' pourrait vous donner un x positif. Sinon 'if (x <0) x = x% 360 + 360' Ceci gardera votre x dans la plage [x, 360) – Ronald

+0

Si je remplace mes instructions if par les vôtres, cela ne résout pas tout le problème .. – Caspert

+0

Ne les remplacez pas, ajoutez la déclaration – Ronald

Répondre

0

Vous pouvez utiliser la fonction suivante pour convertir la valeur de positif pour vous assurer de la logique fonctionne

if (x<0) 
    flag true; 
x = Maths.abs(x) 
if flag 
    x = 360-x 
0

En réponse maintenant. Puisque 360 ​​== 0 mod 360, vous voulez un x dans [0, 360). L'opérateur modulo peut renvoyer une valeur négative si l'argument est négatif. Vous devrez tester cela pour votre langage de programmation.

Je suppose que -1 % 5 == -1, d'où l'opérateur modulo ne change pas de signe. Puis

x = Math.floor(thisComp.layer("Ellipse 2").transform.rotation) 

if (x >= 0) x%360 + "°" 
if (x < 0) x = x%360 + 360 + "°" 

devrait faire l'affaire. Si l'opérateur modulo renvoie des valeurs positives, vous pouvez omettre le "+ 360" dans la dernière instruction.

+0

Merci. Cela fonctionne, mais il y a une possibilité de tourner vers la droite, donc + 25 ° par exemple, il va commencer par 360 et compter à zéro. Au lieu de quand la roue tourne dans le sens des aiguilles d'une montre, il commence par zéro et compte jusqu'à 360? – Caspert

+0

Le problème est qu'il n'y a aucune différence entre 0 et 360 si vous calculez le mod 360. Il sera facile d'afficher 360 au lieu de 0. Mais choisir entre les deux nécessite une définition stricte. Et surtout dans une situation initiale où vous ne savez pas ce qui va se passer (tourner en arrière ou en avant), il sera difficile de décider quelle valeur afficher. Fondamentalement, vous feriez 'if (condition spéciale && x == 0) x = 360 +" ° "' (et vous supprimez le signe égal dans le premier si, ce qui est OK de toute façon). – Ronald

0

Cela devrait le faire:

r = thisComp.layer("Ellipse 2").transform.rotation; 
x = r%360; 
if (x<0) x+= 360; 
Math.floor(x) + "°";