2017-08-28 12 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の間に違いはありません.0の代わりに360を表示するのは簡単です。しかし、2つの間で選択するには厳密な定義が必要です。特に、何が起きるのかがわからない初期状態では、表示する値を決めるのが難しいでしょう。基本的に 'if(特殊条件&& x == 0)x = 360 +"° "'を実行します(とにかくOKであれば、最初のifで等号を削除します)。 – Ronald

0

これはそれを行う必要があります。

r = thisComp.layer("Ellipse 2").transform.rotation; 
x = r%360; 
if (x<0) x+= 360; 
Math.floor(x) + "°"; 
関連する問題