メソッドをどのように使用できますsetSinCos(float, float)
か?Android ドキュメントは次のように述べています。
指定された正弦値と余弦値で回転するように行列を設定します。
しかし、あいまいです.たとえば、サイン値とコサイン値の役割がわかりません.Googleで検索しましたが、最終的にこの方法の使用法をコメントなしで見つけました.
同次座標を任意の角度 a だけ (反時計回りに) 回転させる場合、変換行列は次のようになります。
[ cos(a) -sin(a) 0 ]
[ sin(a) cos(a) 0 ]
[ 0 0 1 ]
sin/cos の結果が得られた場合、setSinCos(s, c) は次の行列を作成します。
[ c -s 0 ]
[ s c 0 ]
[ 0 0 1 ]
あなたは自問するかもしれません、なぜですか?さて、スプライトを 2 点間の勾配によって決まる任意の角度に回転させたい場合を考えてみましょう。arctan または arccos を使用して角度を決定し、正しい象限にいることを確認するためにいくつかのチェックを行ってから、setRotate() に新しい角度を指定できます。 しかし、角度 (sin=dy/dist、cos=dx/dist) を必要とせずに既に sin/cos の値を持っているのに、なぜでしょうか?
setSinCos
これは、プログラマにとってより簡単で効率的です。
質問はそれほど単純ではありませんでした。たとえば、1 を超える値を渡すとどうなるでしょうか。Android のマニュアルには何も書かれていませんが、「真の」正弦/余弦のチェックが行われていないことは簡単にわかります。上記の「ダン」の変換行列を使用しただけです。したがって、一般的には、回転するだけでなく、同時にスケーリングします。それはバグではなく、文書化されていない機能だと思います。