Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Произвольный поворот

Читайте также:
  1. АНАЛІЗ ТЕХНІКИ ПОВОРОТІВ В РУСІ
  2. АНАЛІЗ ТЕХНІКИ ПОВОРОТІВ НА МІСЦІ
  3. Выбор, обоснование направления, способа движения и вида поворота МТА.
  4. Высота QUIK CHANGE III может быть проведена поворотом опорных винтов (С) по обе стороны струнодержателя при помощи плоской отвертки или монеты.
  5. Выход из поворота
  6. На крутых поворотах
  7. Нове обєднання всіх частин Армії У.Н.Р. на березі Дніпра в половині лютого 1920 р. — Марш на Полтавщину. — Поворот на Правобережжя. — в Холодному Яру

По своей сути произвольный поворот весьма похож на кватернион. Отличия заключаются в том, что угол поворота, задаваемый кватернионом, должен лежать в диапазоне от –180 до +180 градусов, да еще в солидном количестве методов для работы с кватернионами.

 

Литералы

Произвольный поворот не может быть определен с помощью литерала

 

Конструкторы

Проще всего задать поворот подобно кватерниону, с помощью угла и оси поворота.

angleaxis Число Точка_в_3D_пространстве

Число задает угол поворота в градусах, а точка – вектор оси поворота. Кроме этого угол может быть преобразован из кватерниона, углов Эйлера или матрицы 4х3 с помощью операции преобразования типа.

Кватернион as angleaxis

Углы_Эйлера as angleaxis

Матрица_4х3 as angleaxis

 

Операторы

К углу поворота можно применять следующие операторы. Операции сравнения – равенство и неравенство

Произвольный_поворот_1 = = Произвольный_поворот_2

Произвольный_поворот_1! = Произвольный_поворот_2

и операцию преобразования типа

Произвольный_поворот as Другой_класс

Произвольный поворот может быть преобразован в кватернион, матрицу 4х3 или углы Эейлера.

 

Свойства

Величину угла поворота в градусах возвращает свойство

Произвольный_поворот. angle

Вектор оси поворота – свойство

Произвольный_поворот. axis

Число полных оборотов вокруг оси

Произвольный_поворот. numrevs

Например, зададим поворот вокруг оси Z на 765 градусов, то есть на два полных оборота и еще 45 градусов

a = angleaxis 765 z_axis

a.angle -- Возвращает 765

a.axis -- Возвращает [0,0,1]

a.numrevs -- Возвращает 2

 

Методы

Для поворота предусмотрены два метода – копирования

copy Произвольный_поворот

создает копию указанного поворота, и генерация случайного поворота

random Произвольный_поворот_1 Произвольный_поворот_2

возвращает поворот в диапазоне от первого до второго.

 

Углы Эйлера

Подобно тому, как местоположение любого объекта может быть однозначно определено с помощью трех координат, ориентация тела в пространстве может быть определена с помощью трех углов, называемых углами Эйлера. Для получения заданной углами Эйлера ориентации необходимо последовательно повернуть тело относительно осей системы координат. Следует отметить, что порядок, в котором производятся повороты, важен, и при выполнении поворота, объект сначала поворачивается относительно оси X, затем Y и затем Z.

 

Литералы

Для углов Эйлера специальных литералов не предусмотрено.

 

Конструкторы

Углы Эйлера могут быть заданы своими значениями

EulerAngles Число_1 Число_2 Число_3

где числа задают повороты относительно осей X, Y и Z в градусах, либо с помощью операции преобразования типа из кватерниона или произвольного поворота.

Кватернион as EulerAngles

Произвольный_поворот as EulerAngles

 

Операторы

Для углов Эйлера определены две операции сравнения

Углы_Эйлера_1 = = Углы Эйлера_2

Углы_Эйлера_1! = Углы Эйлера_2

равенство и неравенство, и операция преобразования типа.

Углы_Эйлера as Другой_класс

Углы Эйлера могут быть преобразованы в кватернион, произвольный поворот или матрицу 4х3.

 

Свойства

Углы Эйлера имеют только три свойства

Углы_Эйлера. x

Углы_Эйлера. y

Углы_Эйлера. z

которые возвращают повороты вокруг соответствующих осей в градусах.

 

Методы

Для углов Эйлера определен метод копирования

copy Угол_Эйлера

и генерация случайных углов Эйлера

random Угол_Эйлера_1 Угол_Эйлера_2

при этом случайные углы выбираются из диапазона, заданного указанными углами. Прочие методы предназначены для более хитрого перевода углов Эйлера в кватернионы и обратно. Их рассмотрение пока отложим.

 

Матрица 4х3

Кватернионы, углы Эйлера и повороты позволяют оперировать только с ориентацией объекта, хотя кватернионы еще и масштабируют. Матрица, наряду с этим позволяет и масштабировать, и перемещать объект в пространстве. Благодаря этим свойствам, матрица имеет большое количество конструкторов

 

Конструкторы

Самым естественным, но не самым простым способом матрица задается полым набором своих элементов.

matrix3 Точка_в_3D_пристранстве_1 Точка_в_3D_пристранстве_2 Точка_в_3D_пристранстве_3 Точка_в_3D_пристранстве_4

четыре точки при этом изображают четыре строки матрицы, по три элемента в каждой. Могут быть заданы нулевая матрица

matrix3 0

или единичная

matrix3 1

Просто задаются матрицы осуществляющие повороты вокруг осей координат

rotateXMatrix Число

rotateYMatrix Число

rotateZMatrix Число

где число – угол поворота в градусах.

Матрица, переносящая объект в пространстве задается так

transMatrix Точка_в_3D_пространстве

где указанная точка задает смещения по трем координатам. Масштабирование объекта можно осуществить с помощью матрицы заданной таким образом

scaleMatrix Точка_в_3D_пространстве

Здесь точка задает коэффициенты сжатия или расширения по соответствующим осям. Можно задать матрицу для поворота сразу по трем осям

rotateYPRMatrix Число_1 Число_2 Число_3

первое число соответствует повороту объекта относительно оси Y, второе X, третье Z. Буквы YPR – сокращение от английских названий углов Эйлера – yaw, pitch и roll. Имеется еще одна, несколько замысловатая возможность создания матрицы.

matrixFromNormal Точка_в_3D_пространстве

При этом созданная матрица определяет такой поворот объекта, что его ось Z повернется в направлении вектора, определенного указанной точкой.

 

Операторы

Для матриц определены операции сложения, вычитания и умножения.

Матрица_3х4_1 + Матрица_3х4_2

Матрица_3х4_1 - Матрица_3х4_2

Матрица_3х4_1 * Матрица_3х4_2

Умножение матриц, разумеется, не коммутативно, то есть a*b не равно b*a. Если нам надо провести над объектом сначала преобразование, определяемое матрицей M1, а затем другое преобразование, определяемое матрицей M2, то проще вычислить матрицу M1*M2, и применить к объекту преобразование, заданное результирующей матрицей. При этом порядок умножения должен быть именно таков – матрица первого преобразования слева.

Хотя в руководстве этого не сказано, но для матриц, как и для всякого класса, производного от Value, определены операции сравнения – равенство и неравенство.

Матрица_3х4_1 = = Матрица_3х4_2

Матрица_3х4_1!= Матрица_3х4_2

 

Свойства

Можно получить строки матрицы

Матрица_3х4. row1

Матрица_3х4. row2

Матрица_3х4. row3

Матрица_3х4. row4

Поскольку четвертая строка является частью, отвечающей за смещение объекта, то последнее свойство может записываться и так

Матрица_3х4. translation

Следующие свойства матрицы могут только читаться

Матрица_3х4. rotationpart

возвращает кватернион, определяющий тот же поворот, что и матрица.

Матрица_3х4. translationpart

возвращает точку в трехмерном пространстве, которая определяет тот же сдвиг, что и матрица.

Матрица_3х4. scalerotationpart

возвращает кватернион, определяющий поворот и масштабирование объекта.

Матрица_3х4. scalepart

возвращает точку в трехмерном пространстве, определяющую масштабирование объекта.

Матрица_3х4. determinantsign

возвращает знак определителя матрицы.

 

Методы

Функция копирования

copy Матрица_3х4

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

isIdentity Матрица_3х4

Она возвращает true, только если матрица единична. Функция

inverse Матрица_3х4

возвращает матрицу, обратную заданной. При этом заданная матрица не изменяется.

Иногда возникает необходимость перевести преобразования, заданные матрицей в другую систему координат. В этом случае используется функция

xformMat Матрица_3х4_1 Матрица_3х4_2

Первая матрица задает преобразования, вторая – систему координат, в которую они будут пересчитываться. Результатом будет матрица преобразований в новой системе координат.

Все описанные далее методы для работы с матрицами 4х3 являются картированными, то есть могут работать как с одиночной матрицей, так и с массивами матриц. Функция

identity Матрица_3х4

делает заданную матрицу единичной, а

zero Матрица_3х4

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

orthogonalize Матрица_3х4

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

translate Матрица_3х4 Точка_в_3D_пространстве

Для добавления к исходной матрице преобразования поворота можно использовать функции

rotateX Матрица_3х4 Число

rotateY Матрица_3х4 Число

rotateZ Матрица_3х4 Число

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

rotate Матрица_3х4 Кватернион

Преобразование масштабирования добавляется к матрице с помощью функции

scale Матрица_3х4 Точка_в_3D_пространстве Логическое_значение

Точка в трехмерном пространстве задает масштабирование по соответствующим осям. Третий параметр функции scale необязателен и введен после обнаружения ошибки в предыдущих версиях 3ds max. Дело в том, что функция scale применяла преобразование масштабирования только к первым трем строкам матрицы. Для сохранения совместимости с ранее разработанными скриптами был введен третий параметр. Если он не указан, или равен false, то масштабирование к четвертой строке матрицы, как и ранее, не применяется. При значении третьего параметра true, четвертая строка матрицы масштабируется.

Шесть описанных выше функций добавляют преобразование к преобразованиям, заданным матрицей. Рассмотрим пример

m = rotateXMatrix 45

translate m [ 1, 1, 1 ]

Первая строка создает матрицу поворота, вторая добавляет к ней сдвиг. В результате работы данного скрипта, матрица m будет содержать следующие преобразования. Сначала поворот относительно оси X, а затем сдвиг по всем осям на единицу. Ну а если перед Вами стоит обратная задача – добавить к некому преобразованию, преобразования, содержащиеся в матрице? В этом случае можно применять следующие функции, аналогичные приведенным.

preTranslate Матрица_3х4 Точка_в 3D_пространстве

preRotateX Матрица_3х4 Число

preRotateY Матрица_3х4 Число

preRotateZ Матрица_3х4 Число

preRotate Матрица_3х4 Кватернион

preScale Матрица_3х4 Точка_в_3D_пространстве Логическое_значение

Все они действуют точно так же, как и описанные ранее, за следующим исключением. Если переписать предыдущий пример так

m = rotateXMatrix 45

preTranslate m [ 1, 1, 1 ]

то в результате получится матрица m, которая вначале сдвигает объект на единицу по всем осям, а затем поворачивает его относительно оси X на 45 градусов.

 


Дата добавления: 2015-10-31; просмотров: 145 | Нарушение авторских прав


Читайте в этой же книге: Литералы массивов | Выражения сравнения | Блоковые выражения | Контекстные выражения | Каскадирование префиксов | Операторы цикла do и while | Создание функций, локальных внутри структуры | Символьные строки | Логические (Булевы) значения | Точка в трехмерном пространстве |
<== предыдущая страница | следующая страница ==>
Точка в двумерном пространстве| Матрица произвольных размеров

mybiblioteka.su - 2015-2024 год. (0.019 сек.)