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
x4
矩阵。标识4
x4
矩阵如下:
在这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中进行第二次猜测