我编写了一个程序(like this),通过用户对缩放,倾斜,旋转和翻译的输入,生成并将变换矩阵应用于对象。
现在我想反过来做:给定转换矩阵,如何计算这些值?矩阵是2D(a,b,c,d,tx,ty)。
我知道这是一个纯粹的数学问题,但我在高中时并不够集中......
答案 0 :(得分:5)
我在this tutorial找到了很多有用的信息,这些信息为我解决了这个问题。以下是关心人的公式:
翻译(像素)
x := tx
y := ty
比例(时间)
scale_x := sqrt(a^2 + b^2)
scale_y := sqrt(c^2 + d^2)
偏斜(度)
skew_x := 180/pi * atan2(d, c) - 90
skew_y := 180/pi * atan2(b, a)
轮换(度)
这是棘手的部分:旋转不是基本的变换函数;事实上,它是偏斜和规模相结合的结果。您可以通过其x
和y
轴倾斜对象,然后对其进行缩放以使其看起来像已旋转。 x偏斜的角度通常被视为旋转角度:
rotation := skew_x
有时:
rotation := skew_y
答案 1 :(得分:2)
假设操作的平移/旋转/缩放和倾斜顺序,最简单的方法是一次一个地剪掉它们。