Математика для 3D (ч.1)
Основы 3D математики необходимы для программирования графики независимо от платформы.
1. Точки (Points) и Отрезки (Segments)
Любая точка в 3D программировании задается набором из 3-х координат по ортогональным (взаимно перпендикулярным) осям (x, y, z) соответственно. Точками задаются также координаты вершин объекта.
Отрезок – часть прямой, соединяющая две точки. Задается координатами концов.
Длина отрезка вычисляется по теореме Пифагора: len = sqrt((x2 - x1)^2 + (y2 - y1)^2 + (z2 - z1)^2), где x1, y1, z1 и x2, y2, z2 – координаты концов отрезка.
Отрезок и точка имеют расположение в пространстве.
2. Векторы (Vectors)
Вектором называется направленный отрезок.
Обычно в 3D программировании равными считаются все вектора, имеющие одинаковую длину (или модуль вектора) и направление. Т.е. у вектора в данном понимании нет расположения, в отличие от отрезка или точки. Поэтому любой вектор можно задать лишь направлением (т.е. единичным, нормализованным вектором или ортом) и его длиной.
Но обычно вектор задается лишь координатами (по 3-м осям) конца вектора, считая, что начало вектора находится в начале координат (0, 0, 0) (вспомните, что для вектора не важно месторасположение). Именно такое восприятие понятия вектора используется в 3D программировании.
Пусть вектор A задан координатами (x, y, z). Тогда модуль (длина) этого вектора вычисляется следующим образом: |A| = sqrt(x^2 + y^2 + z^2).
Вектор (0,0,0) не имеет направления и является точкой без месторасположения. Такой вектор называется нулевым вектором или нуль-вектором.
3. Действия над векторами
3.1. Сложение (addition) двух векторов.
Суммой двух векторов A(x1, y1, z1) и B(x2, y2, z2) называется вектор C(x1+x2, y1+y2, z1+z2).
Два вектора называются противоположными, если их сумма равна нуль-вектору.
3.2. Умножение (multiplication) вектора на число
Произведением вектора A(x, y, z) на число R называется вектор C(x*R, y*R, z*R).
3.3. Скалярное произведение (scalar multiplication или dot product) двух векторов.
Скалярным произведением двух векторов A(x1, y1, z1) и B(x2, y2, z2) называется такое число C = x1*x2 + y1*y2 + z1*z2 и обозначается как (A,B).
Также можно вычислять по формуле (A,B) = |A|*|B|*cosφ, где φ - угол между A и B.
Скалярное произведение кроме всего прочего используется для проверки ортогональности (перпендикулярности) двух векторов. Так, если: (A,B) = 0 , то A и B – ортогональны.
3.4. Векторное произведение (vector multiplication или cross product) двух векторов.
Векторным произведением двух векторов A и B (обозначается [A,B]) называется вектор C, обладающий следующими свойствами:
- длина вектора C равна произведению длин векторов A и B на синус угла между ними: |C| = |A|*|B|*|sinφ|;
- вектор C ортогонален каждому из векторов A и B;
- вектор C направлен так, что тройка векторов ABC является правой (т.е. если смотреть из начала C к концу, то для совмещения A к B необходимо вращать A по часовой стрелке вокруг оси C)
По другому:
[A(x1,y1,z1), B(x2,y2,z2)] = C(x3,y3,z3),
где x3 = y1*z2 - y2*z1,
y3 = x1*z2 - x2*z1,
z3 = x1*y2 - x2*y1;
Заметим, что для векторного произведения не действительно свойство коммутативности.
Векторное произведение играет очень важную роль в 3D программировании т.к. позволяет вычислять нормальные вектора (или просто нормали) к граням, т.е. вектор, перпендикулярный грани. Нормали используются при расчете освещения, сглаживания, обработке столкновений и еще много для чего.
Кроме того, векторное произведение помогает при определении взаимного расположения двух векторов. Так, если [A,B] = 0, то векторы A и B – коллинеарны.
3.5. Смешанное произведение двух векторов
Существует, также, смешанное произведение трех векторов: ([A,B],C) = (A,[B,C])
Смешанное произведение трех векторов – это число, равное объему параллелепипеда, построенного на векторах A, B и C.
Если смешанное произведение трех векторов равно нулю, то эти векторы компланарны, т.е. лежат в одной плоскости.
Векторы занимают очень важное место в программировании 3D графики, так как являются, по сути, ее основой (вспомним, что это векторная графика). Более детально вы ознакомитесь со значением векторов при изучении выбранной платформы.
Нагло сперто ОТСЮДА
Leave a comment