Основы программирования трехмерной графики в DirectX. Часть III: Матрицы

Программирование трехмерной графики невозможно себе представить без использования матриц. Матрица – это двухмерный массив данных заполненный определенными значениями. Матрицы позволяют легко и быстро производить любые манипуляции с вершинами объектов в пространстве. С помощью матриц можно связать несколько однородных операций над вершинами, что в результате позволяет выполнить колоссальные по объему математические вычисления за небольшой промежуток времени. Более того, матрицы можно использовать и в описании координатных систем для переноса, масштабирования, вращения и трансформации объектов в пространстве. Размерность матрицы может быть любой, но в компьютерной графике типичной размерностью является матрица 4х4, то есть четыре строки и четыре столбца.

Матрица

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

Сложение и вычитание матриц

Все математические операции над матрицами основаны на знаниях, которые мы изучали в школе. Единственное условие в сложениях и вычитаниях матриц является их одинаковая размерность. Чтобы сложить между собой две матрицы, необходимо просто сложить поэлементно обе матрицы между собой, а результат записать в отдельную матрицу.

Сложение

Вычитание двух матриц происходит по той же схеме.

Вычитание

Умножение матриц

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

Умножение

Матричное произведение отличается от скалярного произведения тем, что в этой операции используются две и более матрицы, где обязательно должно соблюдаться следующие условие: количество столбцов матрицы А должно быть равно количеству строк матрицы В. Механизм перемножения двух матриц между собой заключается в последовательном произведении каждого элемента из первой строки матрицы А на каждый элемент первого столбца матрицы В. Затем это произведение суммируется между собой, а результат записывается в отдельную матрицу.

Матричное произведение

 

В этом показательном примере, первый элемент матрицы А умножается на первый элемент первого столбца матрицы В. Далее, второй элемент первой строки матрицы А умножается на второй элемент первого столбца матрицы В. И так далее, до окончания всех элементов в строке матрицы А и в столбце матрицы В. Затем эти результаты суммируются между собой, а итоговое значение записывается в первую строку матрицы С. Все записи в матрице С происходят слева направо и сверху вниз. Перемножение матриц между собой носит название матричной конкатенации.

Примечание. Операция умножения матрицы А на матрицу В не коммутативна то есть А * В = С, но В * А не равно С.