剪切矩阵是基本变换的组合吗?

11

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

[1 Sx 0]
[0 1  0]
[0 0  1]
在其他上述变换的组合形式中。尝试搜索、头脑风暴,但无法找到!谢谢!

翻译和缩放对剪切没有影响,因为它们作用于矩阵的不同元素。旋转可以由3个剪切组成,但我没有听说过反过来做。你能换一种方式提问吗?你为什么需要将这个矩阵组合成其他变换?此外,一旦你组合了最终矩阵,你就无法知道它最初是如何组合的,因为许多不同的组合都可以导致该结果,那么你需要这个矩阵的情况是什么? - user1118321
4个回答

12

对于剪切角度为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)


你是如何想出这个过程的? - Ritika Gupta

6
可以做到,先进行旋转,然后非均匀缩放和反向旋转。你可以在这里找到细节,第三个问题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);


4
在3D图形学中,我们经常使用一个4x4矩阵,其中包含16个有用的元素。单位4x4矩阵如下:

enter image description here

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

shear XY
shear XZ
shear YX
shear YZ
shear ZX
shear ZY

在剪切矩阵中,它们如下:

enter image description here

由于这个矩阵中完全没有旋转系数Rotation coefficients,六个剪切系数Shear coefficients以及三个缩放系数Scale coefficients能够让你使用神奇的三角函数(sincos)绕XYZ轴旋转3D对象。

以下是一个关于如何使用剪切和缩放元素绕其Z轴(逆时针)旋转3D对象的示例:

enter image description here

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

enter image description here


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

作为一种微不足道的改写,一个剪切现在变成了两个剪切和一个旋转。
但是更重要的问题是:为什么需要将剪切矩阵表达为其他形式?它已经是一个基本的矩阵形式,你处于什么奇怪的计算环境中,或者你正在尝试做什么疯狂的事情,需要将一个基本变换表达为更加复杂、计算速度更慢的形式?=)

1
离题了,你的观点应该是对ops问题答案的补充。我认为应该在评论中进行猜测。 - arkan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接