Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MAXScript help rus.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.24 Mб
Скачать

Операторы

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

Матрица_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 градусов.

Матрица произвольных размеров

Данный тип в MAXScript реализует матрицу с заданными программистом размерами

Литералы

Литералов для задания матриц произвольного размера не предусмотрено

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

Матрица задается следующим образом

BigMatrix Число Число

Первый параметр указывает количество строк, второй – столбцов.

Свойства

Для матриц определены два свойства

Матрица.rows

возвращает количество строк в матрице и

Матрица.columns

количество столбцов. Оба свойства доступны только для чтения.

Операторы

Для матриц, кроме двух операций сравнения, равенства и неравенства

Матрица_1 = = Матрица_2

Матрица_1 ! = Матрица_2

определена так же операция сложения

Матрица_1 + Матрица_2

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

Операция индексирования для матрицы определена следующим образом.

Матрица [ Число ]

возвращает объект типа BigMatrixRowArray, который представляет собой не что иное, как одномерный массив и является строкой матрицы. Номер строки определяется числом, стоящим в квадратных скобках. Естественно, к любому элементу полученного массива доступ осуществляется обычным способом.

Объект_типа_BigMatrixArray [ Число ]

Поэтому элемент матрицы можно прочитать или записать так

Матрица [ Число_1 ] [ Число_2 ]

Первое число указывает строку матрицы, второе – столбец.

Доступ к столбцу матрицы не определен.

Методы

Как это ни странно, но метод копирования для матриц произвольного размера не определен.

Функция

invert Матрица

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

m1 = invert m

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

Транспонирование матрицы осуществляется с помощью функции

transpose Матрица

Результатом является матрица, у которой элемент в строке i и столбце j равен элементу в строке j и столбце i исходной матрицы. Транспонирование так же осуществляется “на месте”.

Функция

clear Матрица

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

Если надо увеличить или уменьшить размерность матрицы, то для этого используется функция

setSize Матрица Число_1 Число_2

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

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

identity Матрица

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]