exponenta event banner

hgtransform

Создать объект преобразования

Синтаксис

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

Свойства

Список свойств см. в разделе Свойства преобразования.

Описание

h = hgtransform создает Transform и возвращает его дескриптор.

h = hgtransform('PropertyName',propertyvalue,...) создает Transform с параметрами значения свойства, указанными в списке аргументов. Описание свойств см. в разделе Свойства преобразования.

h = hgtransform(ax,...) создает Transform объект в осях, указанных ax вместо в текущих осях (gca). Выбор ax может предшествовать любой из комбинаций входных аргументов в предыдущих синтаксисах.

Transform объекты могут содержать другие объекты, что позволяет обрабатывать Transform объект и его потомки как единый объект в отношении видимости, размера, ориентации и т.д. Можно сгруппировать объекты, создав для них один Transform объект (т.е. установка объекта Parent свойство для дескриптора объекта преобразования):

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

Основное преимущество воспитания объектов Transform объект - это то, что можно выполнять преобразования (например, перемещение, масштабирование, поворот и т.д.) для дочерних объектов в унисон.

Родитель Transform объект либо является Axes объект или другой Transform объект.

Хотя вы не можете видеть Transform объект, установка его Visible свойство для off делает невидимыми и всех его детей.

Исключения и ограничения

  • A Transform объект может быть родителем любого числа дочерних объектов осей, принадлежащих к одним и тем же осям, за исключением легких объектов.

  • Transform объекты никогда не могут быть родительскими для объектов осей и поэтому могут содержать объекты только из одной оси.

  • Transform объекты могут быть родительскими для других объектов преобразования в пределах тех же осей.

  • Трансформировать нельзя Image потому что изображения не являются истинными 3-D объектов. Текстура, отображающая данные изображения на поверхность CData позволяет создать эффект преобразования изображения в 3-D пространстве.

  • Преобразования не влияют на текстовые объекты, если в текстовом объекте не используются единицы данных. Если Text объект имеет позицию, заданную в единицах данных, затем преобразование перемещает нижний левый угол текста. Преобразование не влияет на размер или ориентацию шрифта. Для изменения размера и ориентации шрифта используйте свойства текста.

Примечание

Перед построением графика многие функции печати очищают оси (удаляют дочерние оси). При очистке осей также удаляются любые Transform объекты в осях.

Примеры

свернуть все

В этом примере показано, как создать звезду 3-D с группой объектов поверхности, родительских одному объекту преобразования. Затем объект преобразования поворачивает объект вокруг оси 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');

Создайте объект преобразования и родительский объект поверхности. Инициализируйте матрицу поворота и масштабирования для единичной матрицы (глаза).

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