Это перевод 2 главы книги “Mathematics for 3D Game Programming and Computer Graphics Third Edition”. Не нашёл перевод книги на русский язык, пусть пока побудет здесь.
2. Векторы
Векторы используются для представления точек в пространстве, таких как местоположение объектов или вершин треугольных сеток, а также для описания пространственных направлений, например, ориентации камеры или нормалей поверхности.
2.1 Свойства векторов (Vector Properties)
N-вектор может быть записан так: V = (V_1, V_2, … , V_n),

Где номер V_i называется компонентном вектора V.
Также, вектор может быть записан с именем координатной оси, которой он соответствует: P_x, P_y и P_z.
Вектор V в уравнении (2.1) может быть представлен матрицей, имеющий один столбец и несколько рядов:
Векторы обычно выражаются в этих формах, но иногда нам необходимо выразить векторы в виде матрицы, состоящей из одной строки и n столбцов. Мы записываем векторы-строки как транспонированные им соответствующие векторы-столбцы:

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

В случае, когда a=-1, мы используем слегка упрощённую запись -V для представления отрицания вектора V.
Покомпонентное складывание и вычитание у векторов:
![]()
Некоторые фундаментальные свойства векторной арифметики.
Теорема 2.1. Для любых двух скаляров a и b и любых трёх векторов P, Q и R справедливы следующие свойства:


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

Величиной вектора также иногда называют нормой или длиной вектора. Вектор, длина которого равна единице, называется единичным вектором, или ортом. Когда V представляет собой трехмерную точку или направление, уравнение (2.6) можно записать как

Вектор V, имеющий хотя бы один ненулевой компонент, можно изменить до единичной длины путем умножения на 1/||V||. Эта операция называется нормализацией и часто используется в 3D -графике. Следует отметить, что термин «нормализовать» никак не связан с термином «вектор нормали», который относится к вектору, перпендикулярному поверхности в определенной точке.
Функция величины, указанная в уравнении (2.6), подчиняется следующим правилам.
Теорема 2.2. Для любого скаляра a и любых двух векторов P и Q справедливы следующие свойства:
Доказательства:
(а) Это следует из того факта, что подкоренное выражение в уравнении (2.6) представляет собой сумму квадратов, которая не может быть меньше нуля.
Неравенство треугольника утверждает, что сумма длин любых двух сторон треугольника должна быть больше длины третьей стороны.
(б) Предположим, что P = (0,0,..., 0). Тогда подкоренное выражение в уравнении (2.6) равно нулю, поэтому ||P|| = 0. Наоборот, если мы предположим, что ||P|| = 0, то каждый компонент P должен быть равен нулю, поскольку в противном случае сумма в уравнении (2.6) была бы положительным числом.
(c) Оценивая уравнение (2.6), имеем следующее.
(d) Это неравенство известно как неравенство треугольника. Геометрическое доказательство может быть дано, если рассматривать P и Q как две стороны треугольника. Как показано на рисунке 2.1, P + Q образует третью сторону треугольника, длина которой не может превышать сумму двух других сторон.
Мы сможем дать алгебраическое доказательство неравенства треугольника после введения скалярного произведения в следующем разделе.
2.2 Скалярное произведение (The Dot Product)
The dot product двух векторов, также известное как scalar product или inner product, является одной из наиболее часто используемых операций в трехмерной графике, поскольку оно дает меру разницы между направлениями, в которых указывают два вектора.
Определение 2.3. Скалярное произведение двух n-мерных векторов P и Q, записываемое как P * Q — это скалярная величина, вычисляемая по формуле

Это определение гласит, что скалярное произведение двух векторов определяется суммой произведений каждого компонента. В трёх измерениях мы имеем

Скалярное произведение P * Q также может быть выражено как матричное произведение
что дает матрицу 1 × 1 (т.е. скаляр), единственный элемент которой равен сумме в уравнении (2.9).
А теперь важная теорема, которая раскрывает повсеместную полезность скалярного произведения.
Теорема 2.4. Для двух n-мерных векторов P и Q скалярное произведение P на Q удовлетворяет уравнению.

где a — плоский угол между линиями, соединяющими начало координат с точками, представленными P и Q.
Рисунок 2.2. Скалярное произведение связано с углом между двумя векторами уравнением PQ=||P||||Q||*cos a.
Доказательства:
Пусть a — угол между векторами P и Q, как показано на рисунке 2.2. По теореме косинусов, мы знаем, что

Это расширяется до

Все члены P^{2}_{i} и Q^{2}_{i} сокращаются, и у нас остается

Деление обеих сторон на 2 - дает нам желаемый результат.
Из теоремы 2.4 непосредственно вытекает пара важных фактов. Первый заключается в том, что два вектора P и Q перпендикулярны тогда и только тогда, когда P * Q = 0. Это следует из того, что косинус равен нулю под углом 90 градусов. Векторы, скалярное произведение которых равно нулю, называются ортогональными. Мы определяем нулевой вектор 0 = (0,0,..., 0) как ортогональный каждому вектору P, поскольку 0 * P всегда равен нулю.
Рисунок 2.3. Знак скалярного произведения показывает, лежат ли два вектора по одну или по разные стороны плоскости.
Второй факт заключается в том, что знак скалярного произведения показывает, насколько два вектора близки к направлению в одном направлении. Обращаясь к рисунку 2.3, можно рассмотреть плоскость, проходящую через начало координат и перпендикулярную вектору P. Любой вектор, лежащий по ту же сторону от плоскости, что и P, даёт положительное скалярное произведение с P, а любой вектор, лежащий по противоположную сторону от плоскости P, даёт отрицательное скалярное произведение с P.
Несколько дополнительных свойств скалярного произведения представлены в следующей теореме.
Теорема 2.5. Для любого скаляра a и любых трёх векторов P, Q и R справедливы следующие свойства.
Доказательства
Пункты (a), (b) и (c) легко проверяются с помощью ассоциативных и коммутативных свойств действительных чисел. Пункт (d) непосредственно следует из определения ||P||, данного в уравнении (2.6), и определения скалярного произведения, данного в уравнении (2.9). Пункт (e) следует из теоремы 2.4, поскольку cosa ≤ 1.
Мы используем обозначение P², когда берём скалярное произведение вектора P на самого себя. Таким образом, согласно части (d) теоремы 2.5, можно сказать, что P * P, P² и ||P||^2 имеют одинаковый смысл.
Часть (e) теоремы 2.5 известна как неравенство Коши-Шварца и дает нам инструмент, который мы можем использовать для предоставления следующего алгебраического доказательства неравенства треугольника.
Доказательство теоремы 2.2(d). (Неравенство треугольника) Начиная с ||P + Q||^2, мы можем вычислить
где для получения неравенства использована теорема 2.5(e). Извлекая квадратные корни, получаем желаемый результат.
Часто возникает ситуация, в которой нам необходимо разложить вектор P на компоненты, параллельные и перпендикулярные другому вектору Q. Как показано на рисунке 2.4, если рассматривать вектор P как гипотенузу прямоугольного треугольника, то перпендикулярная проекция P на вектор Q дает сторону, прилегающую к углу a между P и Q.
Основы тригонометрии говорят нам, что длина стороны, примыкающей к a, определяется выражением ||P||cosa. Теорема 2.4 позволяет вычислить ту же величину, не зная угла a:

Чтобы получить вектор такой длины, параллельный Q, мы просто умножаем его на единичный вектор Q/||Q||. Получаем следующую формулу для проекции P на Q, которую обозначим как proj_Q P.

Рисунок 2.4. Длина проекции вектора P на вектор Q определяется выражением P*Q/||Q||, поскольку P * Q = ||P||||Q|| cosa.
Перпендикулярная составляющая P относительно Q, обозначаемая как perp_Q P, представляет собой просто вектор, оставшийся после вычитания параллельной составляющей, заданной уравнением (2.18), из исходного вектора P:
Проекция P на Q является линейным преобразованием P и, таким образом, может быть выражена как произведение матрицы и вектора. В трёх измерениях проекцию proj_Q P можно вычислить по альтернативной формуле:
2.3 Перекрестное произведение
Перекрёстное произведение двух трёхмерных векторов, также известное как векторное произведение, возвращает новый вектор, перпендикулярный обоим перемножаемым векторам. Это свойство широко применяется в компьютерной графике, например, для вычисления нормали к поверхности в заданной точке по двум касательным векторам.
Определение 2.6. Векторное произведение двух трёхмерных векторов P и Q, записываемое как P X Q, — это векторная величина, определяемая формулой

Обычно используемый инструмент для запоминания этой формулы — это вычисление перекрестных произведений путем оценки псевдодетерминанта
где i, j и k — единичные векторы, параллельные осям x, y и z:
Мы называем правую часть уравнения (2.22) псевдодетерминантом, поскольку верхняя строка матрицы состоит из векторов, тогда как остальные элементы — скаляры. Тем не менее, обычный метод вычисления определителя даёт правильное значение векторного произведения, как показано ниже.
Векторное произведение P X Q также можно выразить как линейное преобразование, полученное из P, которое действует на Q следующим образом.
Как упоминалось ранее, векторное произведение P X Q создает вектор, перпендикулярный обоим векторам P и Q. Этот факт обобщается в следующей теореме.
Теорема 2.7. Пусть P и Q — любые два трёхмерных вектора. Тогда (P×Q) * P = 0 и (PxQ) * Q = 0.
Доказательство
Применяя определения векторного и скалярного произведений, для (PXQ) * P имеем следующее:
Аналогичным образом доказывается и тот факт, что (P×Q) * Q = 0.
Тот же результат возникает, когда мы рассматриваем тот факт, что для любых трех трехмерных векторов P, Q и R выражение (PXQ) * R можно оценить, вычислив определитель
Если любой из векторов P, Q или R можно выразить в виде линейной комбинации двух других векторов, то этот определитель равен нулю. Это включает случаи, когда R = P или R = Q.
Как и скалярное произведение, векторное произведение имеет тригонометрическое значение.
Теорема 2.8. Для двух трёхмерных векторов P и Q их векторное произведение PXQ удовлетворяет уравнению

где a — плоский угол между линиями, соединяющими начало координат с точками, представленными P и Q.
Доказательство.
Возведение в квадрат ||PQ||, у нас есть
Добавляя и вычитая P^{2}_{x}Q^{2}_{x} + P^{2}_{y}Q^{2}_{y} + P^{2}_{z}Q^{2}_{z} в правой части этого уравнения, мы можем записать
Заменив скалярное произведение правой частью уравнения (2.12), имеем
Извлечение квадратных корней доказывает теорему.
Как показано на рисунке 2.5, теорема 2.8 показывает, что величина векторного произведения P X Q равна площади параллелограмма, стороны которого образованы векторами P и Q. Как следствие, площадь A произвольного треугольника, вершины которого заданы точками V_1, V_2 и V_3, может быть вычислена с помощью формулы

Мы знаем, что любой ненулевой результат векторного произведения должен быть перпендикулярен двум умножаемым векторам, но существуют два возможных направления, удовлетворяющих этому требованию. Оказывается, векторное произведение подчиняется правилу правой руки. Как показано на рисунке 2.6, если пальцы правой руки выровнены с вектором P, а ладонь обращена в направлении вектора Q, тогда большой палец указывает вдоль направления векторного произведения P X Q.
Рисунок 2.5. Этот параллелограмм имеет ширину основания ||Q|| и высоту ||P|| sina. Произведение этих двух длин равно ||P X Q|| и даёт площадь параллелограмма.
Рисунок 2.6. Правило правой руки позволяет определить направление векторного произведения. При замене векторов P и Q знак их векторного произведения меняется на противоположный.
Единичные векторы i, j и k, направленные в направлении положительных осей x, y и z соответственно, ведут себя следующим образом. Если расположить оси по кругу так, чтобы i предшествовал j, j предшествовал k, а k предшествовал i, то векторное произведение двух этих векторов по порядку даст третий вектор следующим образом.
Перекрестное произведение двух векторов в обратном порядке дает отрицание третьего вектора следующим образом.
Несколько дополнительных свойств векторного произведения представлены в следующей теореме.
Теорема 2.9. Для любых двух скаляров a и b и любых трёх трёхмерных векторов P, Q и R справедливы следующие свойства.
Доказательство
Части (a)-(d) непосредственно следуют из определения векторного произведения и ассоциативных и коммутативных свойств действительных чисел. Часть (e) можно проверить непосредственно с помощью уравнения (2.27). Для части (f) сначала заметим, что
Прямое вычисление компонента x дает нам
Это не совсем то, что нам нужно, но мы можем добавлять и вычитать член P^{2}_{x} Q_x, чтобы достичь желаемого результата, следующим образом:
Компоненты y и z можно проверить аналогичным образом.
Согласно части (a) теоремы 2.9, векторное произведение не является коммутативной операцией. Поскольку изменение порядка векторов на противоположный приводит к отрицанию произведения, векторное произведение называется антикоммутативным. Кроме того, стоит отметить, что векторное произведение не является ассоциативной операцией. То есть, для любых трёх трёхмерных векторов P, Q и R может быть верно, что (P×Q)×R≠P×(Q×R). Например, пусть P = (1,1,0), Q = (0,1,1) и R = (1,0,1). Сначала вычисляя (P×Q)×R, мы получаем
Теперь вычисляем P×(Q×R), имеем
что дает другой результат.
2.4 Векторные пространства
Векторы, с которыми мы до сих пор имели дело, принадлежат множествам, называемым векторными пространствами. Рассмотрение векторных пространств позволяет нам ввести понятия, важные для изучения матриц в главе 3.
Определение 2.10. Векторное пространство — это множество V, элементы которого называются векторами, для которых определены сложение и скалярное умножение, причем выполняются следующие свойства.
(a). V замкнуто относительно сложения. То есть для любых элементов P и Q из V сумма P + Q является элементом V.
(b). V замкнуто относительно скалярного умножения. То есть для любого действительного числа a и любого элемента P из V произведение aP является элементом V.
(c). В V существует элемент, называемый 0, такой, что для любого элемента P в V, P+0=0+P = P.
(d). Для каждого элемента P в V существует элемент Q в V такой, что P+Q=0.
(e). Сложение ассоциативно. То есть для любых элементов P, Q и R в V, (P+Q)+R=P+(Q+R).
(f). Скалярное умножение ассоциативно. То есть для любых действительных чисел a и b и любого элемента P из V, (ab) P = a(bP).
(g). Скалярное умножение распределяется относительно сложения векторов. То есть для любого действительного числа a и любых элементов P и Q в V, a (P+Q)=aP + aQ.
(h). Сложение скаляров распределяется относительно скалярного умножения. То есть, для любых действительных чисел a и b и любого элемента P в V, (a+b) P = aP + bP.
Многие свойства, требуемые от векторных пространств, упомянуты в разделе 2.1 и, как легко показать, выполняются для векторов, представляющих собой n-кортежи действительных чисел. Векторное пространство, состоящее из всех таких n-кортежей, мы обозначим через R³. Например, векторное пространство, состоящее из всех трёхмерных векторов, обозначается через R³.
Каждое векторное пространство может быть получено линейными комбинациями подмножества векторов, называемого базисом векторного пространства. Прежде чем мы сможем точно определить, что такое базис, нам необходимо понять, что означает линейно-независимость множества векторов.
Определение 2.11. Набор из n векторов \{e_1, e_2,...,e_n\} называется линейно независимым, если не существует действительных чисел a_1, a_2,…, a_n, для которых хотя бы одно из чисел a_i не равно нулю, таких, что

В противном случае набор \{e_1, e_2,...,e_n\} называется линейно зависимым.
n-мерное векторное пространство — это пространство, которое может быть порождено набором из n линейно независимых векторов. Такой порождающий набор называется базисом, формальное определение которого приведено ниже.
Определение 2.12. Базисом B векторного пространства V называется множество из n линейно независимых векторов B = \{e_1, e_2,...,e_n\}, для которых для любого элемента P из V существуют действительные числа a_1, a_2,…, a_n такие, что
![]()
Каждый базис n-мерного векторного пространства содержит ровно n векторов. Например, в R³ невозможно найти набор из четырёх линейно независимых векторов, а набор из двух линейно независимых векторов недостаточен для построения всего векторного пространства.
Существует бесконечное число вариантов базиса любого из векторных пространств R^n. Мы присваиваем специальные термины тем из них, которые обладают определенными свойствами.
Определение 2.13. Базис B = \{e_1, e_2,...,e_n\} векторного пространства называется ортогональным, если для любой пары (i, j), где i ≠ j, имеем e_i*e_j = 0.
Тот факт, что скалярное произведение двух векторов равно нулю, фактически означает, что векторы линейно независимы, как показывает следующая теорема.
Теорема 2.14. Даны два ненулевых вектора e_1 и e_2, если e_1 * e_2 = 0, то e_1 и e_2 линейно независимы.
Доказательство
Предположим, что e_1 и e_2 не линейно независимы, и приходим к противоречию. Если e_1 и e_2 линейно зависимы, то существуют скаляры a_1 и a_1. такие, что a_1e_1 + a_2 e_2 = 0. Обратите внимание, что a_2 не может быть равен нулю, поскольку для этого потребовалось бы, чтобы a_1 также было равно нулю. Таким образом, можно записать e_2 = -(a_1/a_2)e_1. Но тогда e_1e_2 = (a_1/a_2)e^{2}_{1} ≠ 0, противоречие.
Эта теорема показывает, что если мы можем найти любые n ортогональных векторов в векторном пространстве V, то они образуют базис для V. Более специфическое название дано базису, все элементы которого имеют единичную длину. Для удобства мы вводим символ Кронекера δ_{ij}, который определяется следующим образом:

Определение 2.15. Базис B = \{e_1,e_2,...,e_n\} векторного пространства называется ортонормальным, если для любой пары (i, j) выполняется e_i * e_j, = δ_{ij}.
Набор \{i,j,k\}, очевидно, является ортонормированным базисом для R³. Несколько менее тривиальный пример ортонормированного базиса для R³ дают три вектора (\frac{\sqrt{2}}{2}, \frac{\sqrt{2}}{2}, 0), (-\frac{\sqrt{2}}{2}, \frac{\sqrt{2}}{2}, 0) и (0, 0, 1).
Существует простой метод преобразования линейно независимого набора из n векторов в ортогональный базис для R^n. Основная идея заключается в вычитании проекции каждого вектора на предшествующие ему векторы в наборе. Оставшийся вектор должен быть ортогонален своим предшественникам. Точная процедура выглядит следующим образом.
Алгоритм 2.16. Ортогонализация Грама-Шмидта. Для заданного набора из n линейно независимых векторов B=\{e_1, e_2,...,e_n\} этот алгоритм создаёт набор B^`= \{e^{`}_{1}, e^{`}_{2}, ... , e^{`}_{n}\}, такой, что e^{`}_{i} * e^{`}_{j} = 0, если i ≠ j.
А. Установим e^{`}_{1} = e_1.
Б. Начните с индекса i = 2.
C. Вычтите проекцию e_i на векторы {e^{`}_{1}, e^{`}_{2}, ... , e^{`}_{i-1}} из e_i и сохраните результат в e^{`}_{i}.
То есть,

D. Если i < n, увеличиваем i и переходим к шагу C.
Краткое содержание 2 главы
Скалярное произведение
Скалярное произведение двух n-мерных векторов P и Q определяется как скаляр

Скалярное произведение связано с углом a между векторами P и Q формулой
![]()
Векторные проекции
Проекция вектора P на вектор Q определяется формулой

а компонент P, перпендикулярный Q, определяется как

Перекрестные произведения
Перекрестное произведение двух трехмерных векторов P и Q — это трехмерный вектор, определяемый формулой

Это также можно записать как произведение матрицы и вектора
Величина векторного произведения связана с углом a между векторами P и Q формулой
Ортогонализация Грама-Шмидта
Базис B=\{e_1,e_2,...,e_n\} для n-мерного векторного пространства можно ортогонализовать, построив новый набор векторов B^` = \{e^{`}_{1}, e^{`}_{2},..., e^{`}_{n}\} с помощью формулы

Упражнения к главе 2
-
Пусть P = (2,2,1) и Q = (1,-2,0). Вычислите следующее:
-
Ортогонализируем следующий набор векторов.

-
Вычислите площадь треугольника, вершины которого лежат в точках (1,2,3), (-2,2,4) и (7,-8,6).
-
Покажите, что

для любых двух векторов V и W. -
Докажите, что для любых трёх трёхмерных векторов P, Q и R,

-
Докажите, что для любых двух векторов P и Q,

и показать, что это влечет за собой расширенное неравенство треугольника,

































