Main Content

hgtransform 支持的变换

变换对象

变换对象的 Matrix 属性将变换同时应用到对象的所有子对象。变换包括旋转、转换和缩放。定义一个 4×4 变换矩阵的变换。

创建变换矩阵

makehgtform 函数简化了执行旋转、转换和缩放来构造矩阵的过程。有关创建使用 makehgtform 创建变换矩阵的详细信息,请参阅 嵌套变换,执行复杂移动

旋转

旋转变换遵守右手定则 - 将对象绕 x、yz 轴旋转,以正角度按逆时针旋转,同时沿着各轴指向原点。如果旋转角度是 theta,以下矩阵定义了绕 x 轴旋转 theta。

要定义任意轴旋转的变换矩阵,使用 makehgtform 函数。

转换

平移变换将对象相对于当前位置进行移动。转换可指定为采用数据空间单位的距离 txtytz。以下矩阵显示变换矩阵中这些元素的位置。

缩放

缩放变换会改变对象的大小。指定缩放因子 sxsysz 并构造以下矩阵。

不能使用小于或等于零的缩放因子。

默认变换

默认变换是单位矩阵,您可以使用 eye 函数来创建它。以下是单位矩阵。

请参阅撤消变换操作

不允许的变换:透视

透视变换会改变您观察对象的距离。以下矩阵为透视变换矩阵示例,这在 MATLAB® 图形中是不允许的。

[10000100001000px0]

在本例中,px 是透视因子。

不允许的变换:剪切

剪切变换保持给定直线(或三维坐标中的平面)上所有点固定,同时将其他所有平行于直线(或平面)的点根据其与直线(或平面)的垂直距离成比例移动。以下矩阵为剪切变换矩阵示例,这在 hgtransform 中不允许。

[1sx00010000100001]

在此例中,sx 是剪切因子,可以替换单位矩阵中的任意零元素。

绝对变换与相对变换

变换以绝对形式指定,不相对于当前变换。例如,如果首先应用将变换对象在 x 方向上转换 5 个单位的变换,然后应用将变换对象在 y 方向上转换 4 个单位的变换,那么对象最后的位置在 y 方向上偏离原始位置 4 个单位。

如果您将变换进行累积,您必须将各个变换串联到一个矩阵中。请参阅将变换合并到一个矩阵

将变换合并到一个矩阵

通过将单个矩阵串联(或相乘)并把 Matrix 属性设置为结果,来将各种变换合并到一个矩阵中,这样往往更加高效。矩阵乘法不适用交换律,因此矩阵相乘的顺序会影响结果。

例如,您想要先执行缩放,再转换,最后旋转。假设 RTS 是各个变换矩阵,按以下顺序相乘:

C = R*T*S % operations are performed from right to left

S 是缩放矩阵,T 是平移矩阵,R 是旋转矩阵,C 是三种操作的复合矩阵。然后将变换对象的 Matrix 属性设置为 C

hg = hgtransform('Matrix',C);

将变换乘以单位矩阵

以下两组语句并不等价。第一组:

hg.Matrix = C;
hg.Matrix = eye(4);

结果是消除变换 C。第二组:

I = eye(4);
C = I*R*T*S;
hg.Matrix = C;

应用变换 C。将单位矩阵串联到其他矩阵对复合矩阵无效。

撤消变换操作

由于变换操作是以绝对形式指定(不相对于当前变换),您可以通过将当前变换设置为单位矩阵来撤消一系列变换。例如:

hg = hgtransform('Matrix',C);
...
hg.Matrix = eye(4);

将变换对象 hg 所包含的对象返回到其方向,然后再应用变换 C

有关单位矩阵的详细信息,请参阅 eye 函数。

另请参阅

| |

相关主题