默认情况下,旋转矩阵使用原点作为旋转中心。要绕任意点旋转,您必须使用平移矩阵减去到原点的距离,进行旋转,然后再平移回来。除了这对我来说似乎效果不佳。我有以下代码(假设我的对象是 100x100,中心在 50,50):
t = IDENTITY;
t = translate(t, -50, -50);
t = rotate(t, theta);
t = translate(t, 50, 50);
不幸的是,如果我将此变换矩阵t
应用于我的对象,则对象的位置不正确。
我已经实现了一个快速的 jsfiddle 来演示我的问题:http: //jsfiddle.net/9M3uy/67/
在 JSFiddle 中,红色旋转的正方形应该是旋转结束的地方(由 CSS3 内置的 transform-origin 提供),蓝色旋转的正方形是我的计算结束的地方(绿色本来是原始的非旋转正方形)。
有任何想法吗?我只是不了解翻译、旋转、翻译回机制的工作原理,还是我做错了什么?