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

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

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

Матрица

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

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

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

Сложение

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

Вычитание

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

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

Умножение

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

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

 

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

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

 
  • Bitcoin
  • Ethereum
  • Xrp
  • Litecoin
  • Tether
Scan to Donate Bitcoin to 37gL6h1eYph975coF8b4PzpU1NWWsrn7H2

Мотивация в написании новостей

Если вы хотите мотивировать автора проекта делать новости каждый день, то можете отправить любое количество Bitcoin на этот адрес. Просто скопируйте адрес или отсканируйте QR-код в свой кошелек, чтобы отправить Bitcoin автору проекта. Спасибо!

Scan to Donate Ethereum to 0x86358dC52dfC689EE6eE6A35c8D8D2405592094D

Мотивация в написании новостей

Если вы хотите мотивировать автора проекта делать новости каждый день, то можете отправить любое количество Ethereum на этот адрес. Просто скопируйте адрес или отсканируйте QR-код в свой кошелек, чтобы отправить Ethereum автору проекта. Спасибо!

Scan to Donate Xrp to rE1Kj7r2fFqqT1JmeHh5miTqNSGi5mDdH9

Мотивация в написании новостей

Если вы хотите мотивировать автора проекта делать новости каждый день, то можете отправить любое количество Xrp на этот адрес. Просто скопируйте адрес или отсканируйте QR-код в свой кошелек, чтобы отправить Xrp автору проекта. Спасибо!

Scan to Donate Litecoin to MGPZR3gNsUEWfnXtVQXX5Cn22mxK9b51uv

Мотивация в написании новостей

Если вы хотите мотивировать автора проекта делать новости каждый день, то можете отправить любое количество Litecoin на этот адрес. Просто скопируйте адрес или отсканируйте QR-код в свой кошелек, чтобы отправить Litecoin автору проекта. Спасибо!

Scan to Donate Tether to 0x86358dC52dfC689EE6eE6A35c8D8D2405592094D

Мотивация в написании новостей

Если вы хотите мотивировать автора проекта делать новости каждый день, то можете отправить любое количество Tether на этот адрес. Просто скопируйте адрес или отсканируйте QR-код в свой кошелек, чтобы отправить Tether автору проекта. Спасибо!

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пролистать наверх