android – 如何获得我翻译的矩阵然后旋转然后翻译然后再旋转?

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);

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

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

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);

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

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

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

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

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

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

在点p1附近旋转的点p2的新坐标将是

最后,在点p0附近旋转的点p2的新坐标将是

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

转载注明原文:android – 如何获得我翻译的矩阵然后旋转然后翻译然后再旋转? - 代码日志