假设尺寸为(2,2)的图像I.图形坐标C如下:
C = [[0, 0], [1, 0],
[0, 1], [1, 1]]
目标:围绕中心(不是原点)旋转90度。
转化矩阵:
TRotate(90)= [[0,1],[-1,0]]
(假设每个坐标对可以锁步转换(即在GPU上)。)
方法:
例如:
转换为图形坐标:
TX' = tx - width / 2
TY' = ty - width / 2
C' =[[-1, -1], [0, -1],
[-1, 0], [0, 0]]
应用转换矩阵:
C" = [[-1, 1], [-1, -0],
[0, 1], [0, 0]]
转换回来:
C" = [[0, 2], [0, 1],
[1, 2], [1, 1]]
转换回来了......
我真的在努力争取一个关于重心的适当轮换。工作。我认为我转换为数学坐标是错误的。
我更喜欢将坐标转换为以下内容:
C' =[[-1, -1], [1, -1],
[-1, 1], [1, 1]]
我通过观察如果原点存在于四个像素之间,+ ve轴指向下,+ ve x轴指向右边,那么点(0,0)将实现此转换其余为(-1,-1)等等。 (结果旋转和转换得到了所需的结果)。
然而,我无法找到适合坐标的正确类型转换,以便将原点放在中心位置。我使用同源坐标尝试了转换矩阵,但这不起作用。
修改
对于马尔科姆的建议:
位置矢量=
[0
0
1]
通过减去width / 2 == 1:
进行翻译[-1
-1
0]
通过乘以变换矩阵进行旋转:
|-1| | 0 1 0| |-1|
|-1| X |-1 0 0| = | 1|
|0 | | 0 0 1| | 0|
答案 0 :(得分:1)
您需要在矩阵中添加一行,以便按x进行平移并按y进行平移。然后,在位置向量中添加一个额外的列,将其称为w,硬编码为1.这是确保可以使用标准矩阵乘法执行转换的技巧。
由于你需要一个平移后跟一个旋转,你需要设置平移矩阵,然后通过旋转矩阵进行乘法(如果你在矩阵乘法上不稳定,则将它们都放在3x3s中,忽略最后一列)。因此,翻译和轮换将相互交织。