Создание движка Zavod3D
GameDev.ru / Страницы / Zavod3D engine / Статьи / Матрицы в геймдеве. Часть1.

Матрицы в геймдеве. Часть1.

Автор:

Запостил статейку по матрицам. Старался нагляднее изобразить суть.

Я пытался написать статью, где более просто и понятно было бы описано преобразование координат с помощью матриц. Но что-то не получалось наглядно передать суть дела. В итоге набросал на листочке несколько схем. В дальнейшем, будет выложен ряд более строгих и нормально оформленных статей либо здесь, либо в составе документации движка. Пока выкладываю базовую информацию, нужную для понимания операций с матрицами.

Введение.
Для начала приведу свойства проекций векторов. Далее под термином "масштабирование вектора" будет иметься ввиду его удлинение, укорочение, изменение его направления на противоположное. Для этого вектор умножается на какое-то число. Если умножить вектор на отрицательное число, получится вектор, направление которого будет противоположно направлению исходного вектора.
Ортогональная проекция вектора AB на ось r получается следующим образом. Из начала A  и конца B вектора AB опускаем перпендикуляры на данную ось r. На оси получится отрезок. Назовем его A'B'. Если вектор смотрел в туже сторону, что и ось, то проекция вектора на эту ось - длина отрезка A'B'. Если вектор смотрит в противоположную сторону, нежели ось, то проекция вектора на эту ось - длина отрезка A'B' со знаком минус.

Так вот, если масштабировать вектор, то его ортогональная проекция на какую-либо ось тоже отмасштабируется в то же число раз. То есть если удлинить вектор, удлинится его проекция на ось, если укоротить вектор, проекция этого вектора на ось тоже укоротится. Если поменять направление вектора на противоположное, проекция вектора поменяет знак (Рис.1).

схема образования матрицы при повороте | Матрицы в геймдеве. Часть1.
Проекция суммы векторов равна сумме проекций этих векторов. Сумма векторов - это тоже вектор. Значит, у него тоже может быть проекция
Рис. 2.

Далее рассмотрим две общие декартовые системы координат xOy и  x'Oy', у которых совпадают начало координат - точка O. В системе координат xOy обозначим масштабные векторы как e1, e2, e3. В системе координат x'Oy' обозначим масштабные векторы как e1', e2', e3'. Рассмотрим точку M. Координаты точки M в системе xOy обозначим через x,y,z. Координаты точки M в системе x'Oy' обозначим через x',y',z'. Радиус-вектор OM точки M обозначим через r.
Допустим, нам нужно по координатам x',y',z' точки M в системе x'Oy' найти ее координаты x,y,z в системе xOy. Иными словами, мы хотим перенести точку из системы x'Oy' в систему xOy. Что для этого делать?
Заметим, что радиус-вектор r точки M один и тот же в обоих системах, как и сама точка. Как любой вектор, радиус-вектор r можно разложить по масштабным векторам системы координат:
r = xe1 + ye2 +ze3 = x'e1' + y'e2' + z'e3'.
Векторы  e1', e2', e3' в системе xOy также могут быть выражены через векторы e1, e2, e3. А, значит, и сам вектор r в итоге выразится через векторы e1, e2, e3. Например, на рис. 4 изображено разложение вектора e1' по векторам e1, e2, e3. То есть вектор e1' в системе xOy будет иметь координаты не (1,0,0), а какие-то другие координаты, которые обозначим так (a11, a21, a31). Можно читать так : "первая координата (по оси Ox или вдоль вектора e1) вектора e1', вторая координата (по оси Oy или вдоль вектора e2) вектора e1', третья координата (по оси Oz или вдоль вектора e3) вектора e1' ".
Матрица - это удобный способ записи вычислений координат x,y,z точки M в системе xOy по координатам векторов e1', e2', e3' в системе xOy и координатам x', y', z' точки M в системе x'Oy'. Она приведена на рисунке.
Каждый столбец матрицы - это координаты векторов e1', e2', e3' в системе xOy. То есть то, как каждый из этих векторов разложен по векторам e1, e2, e3. В первой строчке координата каждого из векторов e1', e2', e3' вдоль e1.
Во второй строчке координата каждого из векторов e1', e2', e3' вдоль e2. В третьей строчке координата каждого из векторов e1', e2', e3' вдоль e3.

Далее в формулу r = x'e1' + y'e2' + z'e3' подставляем вместо векторов e1', e2', e3' их разложения по векторам e1, e2, e3.
1) У каждого из векторов e1', e2', e3' есть компонента по вектору e1 - выносим за скобки вектор e1, в скобках сумма этих компонент, она равна компоненте вектора r по вектору e1 или, что тоже самое, x вектора r (или что тоже самое x точки M) в системе xOy.
2) У каждого из векторов e1', e2', e3' есть компонента по вектору e2 - выносим за скобки вектор e2, в скобках сумма этих компонент, она равна компоненте вектора r по вектору e2 или, что тоже самое, y вектора r (или что тоже самое y точки M) в системе xOy.
3) У каждого из векторов e1', e2', e3' есть компонента по вектору e3 - выносим за скобки вектор e3, в скобках сумма этих компонент, она равна компоненте вектора r по вектору e3 или, что тоже самое, z вектора r (или что тоже самое x точки M) в системе xOy.
схема образования матрицы - вынос множителей за скобки | Матрицы в геймдеве. Часть1.
Далее нас будут интересовать такие вопросы:
1) Как, имея координаты x,y,z точки M в системе xOy и координаты векторов e1', e2', e3' в системе x'Oy', получить координаты x', y', z' точки M в системе x'Oy';
2) Как, наконец повернуть точку M в системе xOy. Об этом в следующей части.

Литература.
Моденов П.С. Аналитическая геометрия. Раздел линейные преобразования и афинные преобразования.
Шипачев. Высшая математика.

3 сентября 2014

#векторы, #линейная алгебра, #матрицы

2001—2018 © GameDev.ru — Разработка игр