Записки программиста Программирование и не только

30Авг/090

Математика для 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 графики, так как являются, по сути, ее основой (вспомним, что это векторная графика). Более детально вы ознакомитесь со значением векторов при изучении выбранной платформы.

Нагло сперто ОТСЮДА

Метки записи: Оставить комментарий
Комментарии (0) Пинги (0)

Пока нет комментариев.


Leave a comment

Trackbacks are disabled.