我知道旋转、缩放、平移等变换的转换矩阵。我也知道剪切变换的矩阵。现在,我需要得到剪切矩阵--
[1 Sx 0]
[0 1 0]
[0 0 1]
在其他上述变换的组合形式中。尝试搜索、头脑风暴,但无法找到!谢谢!我知道旋转、缩放、平移等变换的转换矩阵。我也知道剪切变换的矩阵。现在,我需要得到剪切矩阵--
[1 Sx 0]
[0 1 0]
[0 0 1]
在其他上述变换的组合形式中。尝试搜索、头脑风暴,但无法找到!谢谢!对于剪切角度为theta
的x剪切操作,可归结为如下旋转和缩放:
(a) 逆时针旋转theta/2
。
(b) 缩放,其中x缩放因子 = sin(theta/2)
,y缩放因子 = cos(theta/2)
。
(c) 顺时针旋转45度
。
(d) 缩放,其中x缩放因子 = sqrt(2)/sin(theta)
,y缩放因子= sqrt(2)
。
glRotatef(-26.0,0.0,0.0,1.0);
glScalef(2,1,1);
glRotatef(45.0,0.0,0.0,1.0);
glRectf(0,0,25.0,25.0);
在这16个元素之间,有6种不同的剪切系数:
shear XY
shear XZ
shear YX
shear YZ
shear ZX
shear ZY
在剪切矩阵中,它们如下:
由于这个矩阵中完全没有旋转系数Rotation coefficients
,六个剪切系数
以及三个Shear coefficients
缩放系数
能够让你使用神奇的三角函数(Scale coefficients
sin
和cos
)绕X
、Y
和Z
轴旋转3D对象。
以下是一个关于如何使用剪切和缩放元素绕其Z
轴(逆时针)旋转3D对象的示例:
使用剪切和缩放元素查看3种不同的旋转模式:
剪切是一种基本的矩阵操作,因此虽然你可以将它们表示为“其他矩阵操作的组合”,但这样做真的很奇怪。剪切有两种形式:
| 1 V | | 1 0 |
| 0 1 | , | V 1 |
相比之下,旋转矩阵涉及的内容更多。如果您想使用旋转来表示剪切,那么建议您先将这些东西写出来,以确定需要哪些内容。旋转矩阵的形式如下:
| cos -sin |
| sin cos |
这可以由三个特定的剪切矩阵组成,R = Sx x Sy x Sx 的序列:
| cos(a) -sin(a) | | 1 0 | | 1 sin(a) | | 1 0 |
| | = | | x | | x | |
| sin(a) cos(a) | | -tan(a/2) 1 | | 0 1 | | -tan(a/2) 1 |
R = Sx x Sy x Sx
Sx⁻¹ x R = Sx⁻¹ x Sy x Sx
Sx⁻¹ x R = I x Sy x Sx
Sx⁻¹ x R = Sy x Sx
然后进行右乘:
Sx⁻¹ x R x Sx⁻¹ = Sy x Sx x Sx⁻¹
Sx⁻¹ x R x Sx⁻¹ = Sy x I
Sx⁻¹ x R x Sx⁻¹ = Sy