2017-08-28 116 views
0

我想在After Effects中编写一个表达式来显示对象的旋转度数。问题在于,当元素逆时针旋转时,它不会从360开始,而会倒数至0。它会显示从0到负的无限数的负数。如何计算从0到360的旋转?

当顺时针旋转时,它将从0开始,在它通过360之后,它将从0重新开始。

如何解决逆时针旋转到正确的方式?

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


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

代码应用于文本图层,它将显示元素“椭圆2”的正确度数。

+0

'如果(x <0)X = X%360'可能会给你一个正x。否则'如果(x <0)x = x%360 + 360'这将保持你的x在范围[x,360) – Ronald

+0

如果我用你的代替if语句,它不能解决整个问题。 – Caspert

+0

不要替换它们,添加声明 – Ronald

回答

0

您可以使用下面的函数的值转换为正,以确保您的逻辑现在工作

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

作为一个答案。由于360 == 0 mod 360,你需要在[0,360)中有一个x。 如果参数为负,模运算符可能会返回负值。 你必须测试你的编程语言。

我假设,即-1 % 5 == -1,因此模运算符不会改变符号。然后

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

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

应该做的伎俩。 如果模运算符返回正值,则可以省略最后一条语句中的“+ 360”。

+0

谢谢。这是行得通的,但是在向右旋转时有可能,所以+ 25°例如它将以360°开始并计数回零。而不是当车轮顺时针旋转时,它从零开始并计数到360? – Caspert

+0

问题是如果您计算mod 360,0和360之间没有区别。它将很容易显示360而不是0.但要在两者之间进行选择,则需要严格的定义。特别是在最初的情况下,您不知道会发生什么(向后或向后旋转),因此很难决定显示哪个值。基本上你会这样做,如果(特殊条件&& x == 0)x = 360 +“°”'(如果无论如何,你可以删除第一个等号)。 – Ronald

0

这应做到:

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