我知道旋转、缩放、平移等的变换矩阵。我也知道剪切变换的矩阵。现在,我需要剪切矩阵——
[1 Sx 0]
[0 1 0]
[0 0 1]
以 其他 上述 变换 组合 的 形式. 尝试搜索,尝试头脑风暴,但无法罢工!谢谢!
我知道旋转、缩放、平移等的变换矩阵。我也知道剪切变换的矩阵。现在,我需要剪切矩阵——
[1 Sx 0]
[0 1 0]
[0 0 1]
以 其他 上述 变换 组合 的 形式. 尝试搜索,尝试头脑风暴,但无法罢工!谢谢!
剪切角的 x-shear 操作theta
减少为旋转和缩放,如下所示:
(a) 逆时针theta/2
旋转。
(b) 用x-scaling factor = sin(theta/2)
和缩放y-scaling factor = cos(theta/2)
。
(c)45 degree
顺时针旋转。
(d) 用x-scaling factor = sqrt(2)/sin(theta)
和缩放y-scaling factor= sqrt(2)
。
是的,它可以完成,旋转之后是非均匀缩放和反向旋转。您可以在第三个问题http://www.cs.cmu.edu/~djames/15-462/Fall03/assts/15-462-Fall03-wrAssign1-answer.pdf中找到详细信息。您也可以尝试以下 openGL 代码。它将矩形旋转 45 度,然后在 x 轴上缩放。然后旋转 -26 度,即 atan(0.5)。0.5 来自在 x 方向缩放后找到 x 轴和一侧之间的角度。
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);
在 3D 图形中,我们经常使用包含 16 个有用元素的4
x4
矩阵。Identity 4
x4
矩阵如下:
在这 16 个元素之间,有 6 个不同的剪切系数:
shear XY
shear XZ
shear YX
shear YZ
shear ZX
shear ZY
在剪切矩阵中,它们如下所示:
因为在这个矩阵中根本没有,六个和三个Rotation coefficients
Shear coefficients
允许您使用神奇的三角函数(和)围绕、和轴Scale coefficients
旋转 3D 对象。X
Y
Z
sin
cos
下面是一个如何Z
使用剪切和缩放元素围绕其轴旋转 3D 对象 (CCW) 的示例:
使用剪切和缩放元素查看 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 |
现在,我们可以做一些简单的矩阵操作来得到 Sy。首先左乘:
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
作为一个简单的重写,一个剪切现在是两个剪切和一个旋转。
但更重要的问题是:为什么需要将剪切矩阵表示为其他东西?它已经是一个初等矩阵形式,你在什么奇怪的计算环境中,或者你想做什么疯狂的事情,这需要你将初等变换表达为一种更复杂、更慢的计算方式?=)