Матричная структура дает неправильный вывод - PullRequest
3 голосов
/ 05 ноября 2019

В .Net Framework 4.6.2 (и более ранних версиях) существует структура Matrix4x4 в пространстве имен System.Numerics. Структура имеет свойство Translation, которое, очевидно, используется для хранения поступательной части. Однако при использовании этого свойства он сохраняет значения в последней строке

Пример:

var test = Matrix4x4.CreateTranslation(new Vector3(1, 2, 3));

дает следующую матрицу:

1, 0,0, 0

0, 1, 0, 0

0, 0, 1, 0

1, 2, 3, 1

Но это должно быть

1, 0, 0, 1

0, 1, 0, 2

0, 0, 1, 3

0, 0, 0, 1

по моему мнению.

Это ошибка или я что-то совершенно не так понял?

1 Ответ

5 голосов
/ 08 ноября 2019

Матрица перевода "транспонирована", потому что System.Numerics определяет row векторы:

Для преобразований матрицы экземпляры Vector2, Vector3 и Vector4 представлены в виде строк:вектор v преобразуется матрицей M с умножением vM.

( источник )

Математика выглядит следующим образом:

            / 1 0 0 0 \
[a b c 1] * | 0 1 0 0 | = [a+A b+B c+C 1]
            | 0 0 1 0 |
            \ A B C 1 /
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...