Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

hgtransform

创建变换对象

语法

h = hgtransform
h = hgtransform('PropertyName',propertyvalue,...)
h = hgtransform(ax,...)

属性

有关属性列表,请参阅 Transform 属性

说明

h = hgtransform 创建一个 Transform 对象并返回其句柄。

h = hgtransform('PropertyName',propertyvalue,...) 使用参数列表中指定的属性值设置创建一个 Transform 对象。有关上述属性的说明,请参阅 Transform 属性

h = hgtransform(ax,...) 在由 ax 指定的坐标区上创建 Transform 对象,而不是在当前坐标区 (gca) 上创建。选项 ax 可以位于上述语法中的任何输入参数组合之前。

Transform 对象可以包含其他对象,因此您可以在处理可见性、大小、方向等方面将 Transform 对象及其子级视为一个整体。要将某些对象分成一组,可将它们的父级设置为同一个 Transform 对象(即将它们的 Parent 属性设置为变换对象的句柄):

h = hgtransform;
surface('Parent',h,...)

将一组对象的父级设置为一个 Transform 对象的主要好处在于,您可以对子对象统一执行变换(例如,平移、缩放、旋转等)。

Transform 对象的父级可以是 Axes 对象或另一个 Transform 对象。

尽管您看不到 Transform 对象,但将其 Visible 属性设置为 off 也会使其所有子对象不可见。

例外和局限性

  • Transform 对象可以作为位于相同坐标区上的任意多个坐标区子对象(光源对象除外)的父级。

  • Transform 对象绝不能是坐标区对象的父级,因此只能包含一个坐标区上的对象。

  • Transform 对象可以是位于相同坐标区上的其他变换对象的父级。

  • 不能变换 Image 对象,因为图像并不是真正的三维对象。通过将图像数据映射到曲面图 CData 的纹理,可以在三维空间中生成图像变换效果。

  • 除非文本对象使用数据单位,否则变换不会影响文本对象。如果 Text 对象的位置以数据单位指定,则变换操作将移动文本的左下角。变换不会影响字体大小或方向。要更改字体大小和方向,请使用文本属性。

注意

许多绘图函数会在绘图之前清除坐标区(移除坐标区子对象)。清除坐标区也将删除坐标区上的任何 Transform 对象。

示例

全部折叠

此示例显示如何使用一组父对象为同一变换对象的曲面图对象创建三维星形。然后,变换对象绕 z 轴旋转该对象,同时缩放其大小。

创建坐标区并调整视图。设置坐标区范围以免在缩放时自动选择范围。

ax = axes('XLim',[-1.5 1.5],'YLim',[-1.5 1.5],'ZLim',[-1.5 1.5]);
view(3)
grid on

创建要将其父对象设置为变换对象的对象。

[x,y,z] = cylinder([.2 0]);
h(1) = surface(x,y,z,'FaceColor','red');
h(2) = surface(x,y,-z,'FaceColor','green');
h(3) = surface(z,x,y,'FaceColor','blue');
h(4) = surface(-z,x,y,'FaceColor','cyan');
h(5) = surface(y,z,x,'FaceColor','magenta');
h(6) = surface(y,-z,x,'FaceColor','yellow');

创建一个变换对象,并将曲面图对象的父对象设置为该对象。将旋转和缩放矩阵初始化为单位矩阵 (eye)。

t = hgtransform('Parent',ax);
set(h,'Parent',t)

Rz = eye(4);
Sxy = Rz;

构造 z 轴旋转矩阵和缩放矩阵。旋转组并使用 r 的递增值进行缩放。

for r = 1:.1:2*pi
    % Z-axis rotation matrix
    Rz = makehgtform('zrotate',r);
    % Scaling matrix
    Sxy = makehgtform('scale',r/4);
    % Concatenate the transforms and
    % set the transform Matrix property
    set(t,'Matrix',Rz*Sxy)
    drawnow
end
pause(1)

使用单位矩阵重置为原始方向和大小。

set(t,'Matrix',eye(4))

此示例创建两个变换对象,以展示如何在相同的坐标区中独立地变换每个对象。转换变换将一个变换对象从原点移开。

创建并设置将作为两个变换对象的父对象的坐标区对象。根据转换后的对象设置范围。

ax = axes('XLim',[-3 1],'YLim',[-3 1],'ZLim',[-1 1]);
view(3)
grid on

创建要组合的曲面图对象。

[x,y,z] = cylinder([.3 0]);
h(1) = surface(x,y,z,'FaceColor','red');
h(2) = surface(x,y,-z,'FaceColor','green');
h(3) = surface(z,x,y,'FaceColor','blue');
h(4) = surface(-z,x,y,'FaceColor','cyan');
h(5) = surface(y,z,x,'FaceColor','magenta');
h(6) = surface(y,-z,x,'FaceColor','yellow');

创建变换对象并将这些对象的父对象设置为相同坐标区。然后,将这些曲面的父对象设置为变换 t1。复制曲面图对象并将副本的父对象设置为变换 t2。该图窗不应发生变化。

t1 = hgtransform('Parent',ax);
t2 = hgtransform('Parent',ax);

set(h,'Parent',t1)
h2 = copyobj(h,t2);

转换第二个变换对象,使其远离第一个变换对象,然后显示结果。

Txy = makehgtform('translate',[-1.5 -1.5 0]);
set(t2,'Matrix',Txy)
drawnow

沿相反方向旋转两个变换对象。

旋转 10 次(2pi 弧度 = 1 次旋转)

for r = 1:.1:20*pi
    % Form z-axis rotation matrix
    Rz = makehgtform('zrotate',r);
    % Set transforms for both transform objects
    set(t1,'Matrix',Rz)
    set(t2,'Matrix',Txy*inv(Rz))
    drawnow
end

版本历史记录

在 R2006a 之前推出