是否可以使用这个2x2矩阵旋转像素?

时间:2012-05-01 05:45:45

标签: math opengl graphics matrix rotation

2x2 matrix to rotate

http://en.wikipedia.org/wiki/Rotation_matrix

假设我有(x,y)2D像素用于图像,现在我想围绕X轴旋转这些像素。 我可以使用上面的2x2矩阵吗?

何时使用2x2矩阵?如何使用2x2矩阵?

opengl是在内部使用该矩阵还是opengl使用3x3矩阵?

在上述R矩阵中如何测量θ度? 是(0,0)到(x,y)和(0,0)到(x',y')之间的角度?

2 个答案:

答案 0 :(得分:1)

您要做的是将您的观点视为1X2矩阵并将其与R矩阵相乘。这将为您提供2X1矩阵,这是新的一点。

[x] X [Cos(a)-Sin(a)] = [newX,newY]
[y] X [Sin(a)Cos(a)]

数学:
newX = xCos(a)-ySin(a)
newY = xSin(a)+ yCos(a)

这将使点(x,y)围绕(0,0)点旋转a度。

注意确保使用带有Cos和Sin的正确尺寸(度或弧度)。

答案 1 :(得分:1)

  

假设我有(x,y)2D像素用于图像,现在我想围绕X轴旋转这些像素。我可以使用上面的2x2矩阵吗?

不,因为无法在2d空间中围绕x轴(或任何其他轴)旋转任何内容。在2d空间中,您只能围绕一个点旋转(并且镜像围绕轴)。您提供的矩阵在零点附近旋转(x = 0,y = 0)。另一件事是您旋转顶点或纹理坐标,而不是像素。您只能在3d空间中围绕轴旋转。

  

opengl是在内部使用该矩阵还是opengl使用3x3矩阵?

由驾驶员决定。最有可能的是固定功能OpenGL内部使用4x4矩阵(允许在3d空间中旋转+平移+投影)。但是,没有什么可以阻止您编写将使用2x2矩阵的片段着色器。

  

在上述R矩阵中如何测量θ度?是(0,0)到(x,y)和(0,0)到(x',y')之间的角度?

答案是肯定的。它是0; 0 - >之间的角度; x'; y'和0; 0 - > X; Y。但是,您仍然无法在2D中围绕“X轴”旋转。您只能围绕一个点旋转。因为你的旋转矩阵是2x2,你只能旋转,缩放,反射和倾斜(0; 0)点。对于需要移位/平移的任何其他内容,你需要3x3矩阵或4x4矩阵(即在3d矢量上操作2d操作,设置z坐标为零)。