Преобразования, Поддержанные hgtransform

Преобразование объектов

Свойство Matrix объекта преобразования применяет преобразование к дочерним элементам всего объекта в унисон. Преобразования включают вращение, перевод и масштабирование. Задайте преобразование с четырьмя четырьмя матрицей преобразования.

Создание матрицы преобразования

Функция makehgtform упрощает конструкцию матриц, чтобы выполнить вращение, перевод и масштабирование. Для получения информации о создании матриц преобразования с помощью makehgtform смотрите Преобразования Вложенного множества для Комплексных Перемещений.

Вращение

Преобразования вращения следуют, правило правой руки — вращают объекты о x-, y-, или ось z, с положительными углами, вращающими против часовой стрелки, при наблюдении вдоль соответствующей оси к источнику. Если угол вращения является тетой, следующая матрица задает вращение теты об оси X.

Чтобы создать матрицу преобразования для вращения вокруг произвольной оси, используйте функцию makehgtform.

Перевод

Перевод преобразовывает объекты перемещения относительно их текущих местоположений. Задайте перевод как расстояния tx, ty, и tz в модулях пространства данных. Следующая матрица показывает местоположение этих элементов в матрице преобразования.

Масштабирование

Преобразования масштабирования изменяют размеры объектов. Задайте масштабные коэффициенты sx, sy, и sz и создайте следующую матрицу.

Вы не можете использовать масштабные коэффициенты, меньше чем или равные нулю.

Преобразование по умолчанию

Преобразование по умолчанию является единичной матрицей, которую можно создать с функцией eye. Вот единичная матрица.

Смотрите операции преобразования отмены.

Запрещенные преобразования: Перспектива

Перспективные преобразования изменяют расстояние, на котором вы просматриваете объект. Следующая матрица является примером перспективной матрицы преобразования, которую не позволяет графика MATLAB®.

В этом случае py является перспективным фактором.

Запрещенные преобразования: Сдвиг

Преобразования сдвига сохраняют все точки вдоль данной строки (или плоскость в 3-D координатах) зафиксированный при сдвиге всех других точек, параллельных строке (плоскость), пропорциональная их перпендикулярному расстоянию от фиксированной строки (плоскость). Следующая матрица является примером матрицы преобразования сдвига, которую не позволяет hgtransform.

В этом случае sx является фактором сдвига и может заменить любой нулевой элемент в единичной матрице.

Абсолютный по сравнению с относительными преобразованиями

Преобразования заданы в свободных членах, не относительно текущего преобразования. Например, если вы применяете преобразование, которое переводит объект преобразования 5 модулей в направлении X, и затем вы применяете другое преобразование, которое переводит его 4 модуля в направлении Y, получившееся положение объекта является 4 модулями в направлении Y от его исходного положения.

Если вы хотите, чтобы преобразования накопились, необходимо конкатенировать отдельные преобразования в единственную матрицу. Смотрите Объединяющиеся Преобразования в Одну Матрицу.

Объединение преобразований в одну матрицу

Обычно более эффективно объединить различные операции преобразования в одну матрицу путем конкатенации (умножение) отдельных матриц и установка свойства Matrix к результату. Умножение матриц не является коммутативным, таким образом, порядок, в котором вы умножаете матрицы, влияет на результат.

Например, предположите, что вы хотите выполнить операцию, которая масштабирует, переводит, и затем вращает. Принимая R, T и S являются вашими отдельными матрицами преобразования, умножают матрицы можно следующим образом:

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 функционирует

Была ли эта тема полезной?