如何获得我翻译的矩阵然后旋转然后翻译然后旋转第二次?

Hap*_*eer 5 math android matrix

在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);
Run Code Online (Sandbox Code Playgroud)

然后我将矩阵设置到画布上并画出腿.

如何在膝盖以下绘制腿部的第二部分?它以与其上方的腿不同的速率旋转,并且具有随着腿在其上方移动的中心点.我尝试了下面的内容,但事实证明最终的结果是围绕某个单点旋转,这不会跟随上面的腿.

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);
Run Code Online (Sandbox Code Playgroud)

我怀疑可能需要在两个不同的Matrix对象中进行两次旋转,然后以某种方式将它们组合起来,但我无法弄清楚究竟是怎么做到的.

编辑:这种类型的矩阵似乎被称为"转换矩阵".组合多个操作称为转换组合.但是,此主题的所有页面均未提及如何进行一系列翻译和轮换.

当然,如果你可以使用矩阵围绕一个点进行旋转,则必须能够以某种方式进行多个矩阵运算,以允许围绕一个点旋转,然后围绕另一个点进行额外旋转.

我已经尝试过关于骨骼动画的页面,但我不能说出他们正在谈论的内容.

小智 6

如果我理解你的问题是正确的,那么你有一个相对轮换的情况.您可以尝试搜索双摆,见图.

双摆

使用旋转矩阵可以找到p1围绕点旋转的点的新坐标p0

p2围绕点旋转的点的新坐标p1将是

最后,p2围绕点旋转的点的新坐标p0将是

矩阵的乘法顺序以及角度的符号.