Геометрический смысл вектора

Вектор определяет расстояние и направление в трехмерном пространстве. Координата точки это вектор, направленный в нее из начала координат и содержащий три величины - длины проекций этого вектора на координатные оси X, Y, Z.
Вектора описываются классом point3: [ <expr>, <expr>, <expr> ]
Например: [x, y, z], [100, 200, 300], [sin x, cos y, tan z]

Кроме позиций векторами описываются процентное масштабирование по координатным осям и цвета RGB палитры.
Контрукторы:
point3 <x> <y> <z>
<color> as point3

Свойства:
<point3>.x : Float -- КООРДИНАТА x
<point3>.y : Float -- КООРДИНАТА y
<point3>.z : Float -- КООРДИНАТА z

Операторы:
<point3> == <point3>
<point3> != <point3>

Стандартная векторная арифметика, если второй операнд - число, операция производится над каждым компонентом вектора.
<point3> + <point3_or_number>
<point3> - <point3_or_number>
<point3> * <point3_or_number>
<point3> / <point3_or_number>

Вектор с длиной 1 называется единичным. Единичные векторы в основном используются только для описания направлений. Три основных вектора в трехмерном пространстве: [1, 0, 0], [0, 1, 0] и [0, 0, 1] это единичные векторы, описывающие направления координатных осей X, Y, Z соответственно.

Сложение векторов
Координаты векторов по соответствующим осям суммируются: V+W=[v1+w1, v2+w2, v3+w3]
При сложении двух векторов образуется вектор, соединяющий их длины и направления. Сложение комутативно: V+W=W+V

Вычитание векторов
Вычитание из одного вектора другой дает вектор между двумя этими точками. V-W=[v1-w1, v2-w2, v3-w3]

Умножение и деление вектора на скалярную величину изменяют на эту величину длину вектора
yV=Vy=[y*v1,y*v2, y*v3]
V/y=[v1/y, v2/y, v3/y]

Длина и направление вектора
Длина вектора выводится из теоремы Пифагора: lVl= sqrt(v1^2+v2^2+v3^2). В MAXScript эту величину считает функция length().
Направление вектора это вектор, разделенный на свою длину. Эта операция дает единичный вектор с тем же направлением: V/lVl

Расстояние между двумя точками это длина вектора между этими точками. lVWl=lW-Vl
Также расстояние можно посчитать функцией distance().


Операции
<point3> * <matrix3>
Трансформирует точку point3 в координатную систему заданную матрицей matrix3

<point3> * <quat>
Вращает точку point3

Пример вращения точки:
rotAxis = [0,0,-10]
rotCenter = [10,0,0]
rotAngle = 90
thePoint = [20,0,0]
q = quat rotAngle (normalize rotAxis)
pointAfterRotation = (((thePoint - rotCenter ) * q) + rotCenter)
messagebox (pointAfterRotation as string)

- <point3>
Унарный минус

<point3>[<integer>]
Возвращает компонент вектора. Допустимые значения индекса от 1 до 3.

<point3>[<integer>] = <float>
Задает значение для компонента вектора. Допустимые значения индекса от 1 до 3.

Методы
copy <point3>
Создает новую копию величины point3.
Например: newPos = copy oldPos
Новая величина содержит независимую копию исходой величины point3.

Длина вектора: length <point3>

Скалярное произведение векторов: dot <point3> <point3>
Геометрическая интерпретация скалярного произведения это длина проекции первого вектора на единичный вектор, задающий направления второго. Если два вектора перпендикулярны, скалярное произведение равно нулю.

Скалярное произведение комутативно: dot X Y == dot Y X
Скалярное произведение ассоциативно: dot (r*X) Y == r*(dot X Y)
Скалярное произведение дистрибутивно: dot X (Y+Z) == (dot X Y) + (dot X Z)

Поскольку скалярное произведение двух единичных векторов равно косинусу угла между ними, то оно также используется для вычисления этого угла.
Пример:
fn GetVectorsAngle v1 v2 =
(
theAngle = acos(dot (normalize v1) (normalize v2))
)

GetVectorsAngle [10,0,0] [10,20,0]
Возвращает 63.435

Векторное произведение
cross <point3> <point3>
Возвращает векторное произведение двух исходных векторов.
Результат векторного произведения это третий вектор, который всегда перпендикулярен плоскости из двух первых векторов, направление вектора определяется правилом правой руки, а его длина равна длине первого вектора, умноженной на длину второго, умноженной на синус угла между первым и вторым вектором. Из этого следует, что векторное произведение параллельных векторов равно нулю (т.к. синус 0 или 180 градусов равен нулю).
Векторное произведение также равно площади параллелограмма, построенного на двух исходных векторах. Поэтому очевидно, что если два вектора - ребра одной грани, то их векторное произведение это нормаль к данной грани с длиной, равной площади грани, умноженной на 2.

Векторное произведение не комутативно, но антикомутативно: cross X Y == cross -Y X
Векторное произведение ассоциативно cross (r*X) Y == r*(cross X Y)
Векторное произведение дистрибутивно: cross X (Y+Z) == (cross X Y) + (cross X Z)

Нормирование вектора
normalize <point3>
Нормирование или нормализация вектора - операция над вектором, возвращающая вектор того же направления, но единичной длины (длина равна 1). Вектор единичной длины соответственно называется нормированным или нормализованным.
Пример:
b = [100,30.5,41.3] --ЗНАЧЕНИЕ Point3 ЗАНОСИТСЯ В ПЕРЕМЕННУЮ
normalB1 = normalize b --ПОЛУЧЕНИЕ НОРМАЛИЗОВАННОГО ВЕКТОРА
Результат: [0.889603,0.271329,0.367406]

length normalB1 --ПРОВЕРКА ДЛИНЫ, ДОЛЖНА БЫТЬ 1.0
Результат: 1.0 --ТАК И ЕСТЬ

normalB2 = b / (length b) -- РАЗДЕЛИВ ВЕКТОР НА ЕГО ДЛИНУ ПОЛУЧИМ НОРМАЛИЗОВАННЫЙ ВЕКТОР (НОРМАЛИЗАЦИЯ ВРУЧНУЮ)
Результат: [0.889603,0.271329,0.367406] - такой же, как и у функции нормализации.

length normalB2 --ПРОВЕРКА ДЛИНЫ
Результат: 1.0 --ТАК ТОЧНО

Расстояние между двумя точками
distance <point3> <point3>
Возвращает расстояние между двумя точками, аналогично функции length (p2 - p1).
Пример:
a = [10, 20, 30]
b = [100, 30.5, 41.3]
distance a b --ВОЗВРАЩАЕТ 91.3123
distance b a --ВОЗВРАЩАЕТ 91.3123
length (b-a) --ВОЗВРАЩАЕТ 91.3123
length (a-b) --ВОЗВРАЩАЕТ 91.3123

Псевдо-случайная точка / вектор
random <point3> <point3>
Создает псевдо-случайную точку между двумя данными точками. Если точки А и В представляют углы диагонали "бокса" с нулевой ориентацией в мировой СК, то псевдослучайная точка будет находиться в его объеме (не на длине вектора B-A).
Пример:
a = [-10,-20,-30] --ТОЧКА A
b = [20,30,50] --ТОЧКА B
p1 = Point pos:a --ОБЪЕКТ Point В ТОЧКЕ A
p2 = Point pos:b --ОБЪЕКТ Point В ТОЧКЕ B
--СОЗДАЕМ 2000 СФЕР В СЛУЧАЙНЫХ ПОЗИЦИЯХ МЕЖДУ ТОЧКАМИ A И B
for i = 1 to 2000 do sphere pos:(random a b) radius:2 wirecolor:blue

Матрица произвольной оси (Arbitrary Axis Matrix)
arbAxis <point3>
Возвращает значение Matrix3 представляющее систему с произвольной осью, в которой значение <point3> используется в качестве направления вверх.

Матрица из нормали
matrixFromNormal <point3>
Возвращает значение Matrix3 с нормалью, заданной вектором <point3> в качестве оси Z. Часть матрицы, отвечающая за перемещение (translation) будет равна [0,0,0]
Компоненты части масштабирования (scale) равны обратным значениям, необходимым для нормализации вектора <point3>.
Например:
MatrixFromNormal [0,0,1] вернет (matrix3 [1,0,0], [0,1,0], [0,0,1], [0,0,0])
MatrixFromNormal [0,1,1] вернет (matrix3 [0,-0.707107,0.707107] [1.41421,0,0] [0,1,1] [0,0,0])


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