Androidアプリで、ランニングレッグを描きたいです。脚の上部を出力するには、次のようにします。
// legCX,legCY is the location on screen about which the leg rotates.
Matrix m = new Matrix();
m.postTranslate(-legCX,-legCY);
m.postRotate(legRot);
m.postTranslate(legCX,legCY);
次に、マトリックスをキャンバスに設定して、脚を描きます。
脚の2番目の部分を膝の下に描くにはどうすればよいですか?それはその上の脚とは異なる速度で回転し、その上の脚と一緒に動く中心点を持っています。次のことを試しましたが、最終的には、上の脚に従わない単一の点を中心に回転することがわかりました。
Matrix m = new Matrix();
m.postTranslate(-legCX,-legCY);
m.postRotate(legRot);
m.postTranslate(0,-legLength);
m.postRotate(footRot);
m.postTranslate(0,legLength);
m.postTranslate(legCX,legCY);
おそらく、2つの異なるMatrixオブジェクトで2つの回転を実行してから、それらを何らかの方法で組み合わせる必要があると思いますが、それを正確に行う方法がわかりません。
編集:このタイプの行列は「変換行列」と呼ばれているようです。複数の操作を組み合わせると、変換の合成と呼ばれます。ただし、このトピックのどのページにも、一連の平行移動と回転を行う方法については触れられていません。
確かに、行列を使用して1つの点を中心に回転できる場合は、何らかの方法で複数の行列操作を実行して、1つの点を中心に回転し、次に別の点を中心にさらに回転できるようにする必要があります。
スケルタルアニメーションのページを見てみましたが、彼らが話していることの頭も尻尾も作れません。