Matrix 剪切矩阵作为基本变换的组合?

Matrix 剪切矩阵作为基本变换的组合?,matrix,graphics,linear-algebra,transformation,rotational-matrices,Matrix,Graphics,Linear Algebra,Transformation,Rotational Matrices,我知道旋转、缩放、平移等变换矩阵。我还知道剪切变换矩阵。现在,我需要剪切矩阵-- [1 Sx 0] [0 1 0] [0 0 1] 以上述其他转换组合的形式。尝试过搜索,尝试过头脑风暴,但无法攻击!谢谢 剪切是一种初等矩阵运算,因此,虽然可以将其表示为“其他矩阵运算的组合”,但这样做确实很奇怪。剪刀有两种形式: | 1 V | | 1 0 | | 0 1 | , | V 1 | 而旋转矩阵更为复杂;使用旋转表示剪切的想法表明,你还没有真正写出这些东西来看看你需要什么,所以让我们看

我知道旋转、缩放、平移等变换矩阵。我还知道剪切变换矩阵。现在,我需要剪切矩阵--

[1 Sx 0]
[0 1  0]
[0 0  1]

以上述其他转换组合的形式。尝试过搜索,尝试过头脑风暴,但无法攻击!谢谢

剪切是一种初等矩阵运算,因此,虽然可以将其表示为“其他矩阵运算的组合”,但这样做确实很奇怪。剪刀有两种形式:

| 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
然后右乘:

      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
作为一个简单的重写,一个剪切现在是两个剪切和一个旋转


但更重要的问题是:为什么需要将剪切矩阵表示为其他形式?它已经是一种初等矩阵形式了,你在什么样的计算环境中,或者你想做什么疯狂的事情,这就要求你将初等变换表示为一种更复杂、更慢的计算方式?=)

对于剪切角
theta
的x剪切操作减少为旋转和缩放 如下:

(a) 逆时针旋转
θ/2

(b) 用
x-比例因子=sin(θ/2)
y-比例因子=cos(θ/2)
进行缩放

(c) 顺时针旋转
45度


(d) 用
x-比例因子=sqrt(2)/sin(θ)
,和
y-比例因子=sqrt(2)
,是的,可以进行旋转,然后进行非均匀缩放和反向旋转。你可以在第三个问题中找到细节。您也可以尝试以下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
x
4
矩阵。标识
4
x
4
矩阵如下:

在这16个元素之间有6个不同的剪切系数:

shear XY
shear XZ
shear YX
shear YZ
shear ZX
shear ZY
在剪切矩阵中,它们如下所示:

因为这个矩阵中根本没有
旋转系数
,所以六个
剪切系数
和三个
比例系数
允许您使用神奇的三角(
sin
cos
)围绕
X
Y
Z
轴旋转3D对象

以下是如何使用剪切和缩放元素围绕其
Z
轴旋转三维对象(CCW)的示例:

使用剪切和缩放元素查看3种不同的旋转模式:


平移和缩放对剪切没有影响,因为它们作用于矩阵的不同元素。一个旋转可以由3把剪刀组成,但我还没有听说过用另一种方式。也许你能把这个问题重新措辞一下吗?为什么需要这个矩阵由其他变换组成?此外,一旦你组成了最终矩阵,你就无法知道它最初是如何组成的,因为许多不同的组合可能会导致这个结果,那么你需要这个的情况是什么?你是如何想出这个过程的?你的意见应该补充ops问题的答案(在本例中存在)。应该在评论IMHO中进行第二次猜测