首先,我认为您需要索引从 0 到 5,而不是从 1 到 6。
根据规范,旋转矩阵为:
a c e
b d f
0 0 1
其中 af 是矩阵列表中的 6 个数字。
我们还发现 a rotate(angle,cx,cy)
aroundcx,cy
等价于
- 翻译(cx,cy)
- 旋转(角度)
- 翻译(-cx,-cy)
这将是:
|1 0 cx| |cos(t) -sin(t) 0| |1 0 -cx|
|0 1 cy| |sin(t) cos(t) 0| |0 1 -cy|
|0 0 1 | | 0 0 1| |0 0 1 |
|cos(t) -sin(t) cx| |1 0 -cx|
= |sin(t) cos(t) cy| |0 1 -cy|
| 0 0 1| |0 0 1 |
|cos(t) -sin(t) (-cx cos(t) + cy sin(t) + cx) |
= |sin(t) cos(t) (-cx sin(t) - cy cos(t) + cy) |
| 0 0 1 |
所以这表明角度信息在系数 a、b、c 和 d 中完全独立可用。如果唯一应用的是这个矩阵,那么 a 和 d 应该匹配,并且 b 和 c 应该只是相反的符号。
但是,查看您的数字列表,它们不是,所以我想知道是否还应用了其他一些转换?正如评论者指出的那样,数字高于 1,因此不是对角度进行简单三角操作的结果。
一种可能性是也有缩放。该矩阵是:
| sx 0 0|
| 0 sy 0|
| 0 0 1|
所以如果先应用,然后旋转,我们会得到:
| sx 0 0| |cos(t) -sin(t) (-cx cos(t) + cy sin(t) + cx) |
| 0 sy 0| |sin(t) cos(t) (-cx sin(t) - cy cos(t) + cy) |
| 0 0 1| | 0 0 1 |
|sx cos(t) -sx sin(t) sx (-cx cos(t) + cy sin(t) + cx) |
= |sy sin(t) sy cos(t) sy (-cx sin(t) - cy cos(t) + cy) |
| 0 0 1 |
从那个矩阵:
a/c = sx cos(t) / (-sx sin(t))
= - cos(t) / sin(t)
= 1/tan(t)
tan(t) = c/a
tan(t) = 0.122628/1.02414
= 0.119738
t = 6.82794 degrees.
从图像上看,我认为这看起来是正确的。
因此,既然我们知道t
,我们可以计算出 sx 和 sy:
a = sx cos(t)
sx = a/cos(t) = 1.0315
和西:
d = sy cos(t)
sy = d/cos(t) = 0.94882
然后,使用我们已经获得的值,获取cx
并找到旋转中心只是进一步代入上述 e 和 f 的方程。cy