Я читал о преобразовании Vector3 с матрицами и подбрасываю углубление в математику и кодирую ее сам по сравнению с использованием существующего кода. По какой-то причине моя школьная учебная программа никогда не включала матрицы, поэтому я заполняю пробел в своих знаниях. К счастью, мне нужно всего несколько простых вещей, я думаю.Метод преобразования трехмерных векторов с матрицей
Контекст заключается в том, что я программирую робот для RoboCup 3D league. Я кодирую его на C#, но он должен работать в Mono. В идеале я бы не использовал никаких существующих графических библиотек для этого (WinForms/WPF/XNA), поскольку все, что мне действительно нужно, - это аккуратное подмножество матричных преобразований.
В частности, мне нужны переводы и повороты x/y/z, а также способ объединения нескольких преобразований в одну матрицу. Затем это будет применено к моему собственному Vector3
, чтобы произвести преобразованный Vector3
.
Я читал разные советы об этом. Например, some моделирует преобразование с матрицей 4x3, others с матрицей 4x4.
Кроме того, некоторые примеры показывают, что вам нужно четвертое значение для матрицы вектора 1. Что происходит с этим значением, когда оно включено в вывод?
[1 0 0 0] [x y z 1] * [0 1 0 0] = [a b c d] [0 0 1 0] [2 4 6 1]
Части я пропавший без вести, являются:
- Каких размеров моих матрицы должны быть
- композитинга преобразования пути умножения матриц преобразования вместе
- Преобразования 3D-векторов с результирующей матрицей
Поскольку я в основном просто хочу, чтобы это сработало, любой psuedo-код был бы Великий. Информация о том, какие значения матрицы выполняют то, какие преобразования достаточно четко определены на многих страницах, поэтому не стоит обсуждать здесь, если вы не очень заинтересованы :)
Спасибо большое за подробный ответ. Отлично! –
Ваша точка зрения о необходимости квадратных матриц для их объединения имеет смысл, но эта статья http://www.oocities.com/evilsnack/matrix.htm (которая обсуждает реализацию в POV-RAY) заставляет это звучать как 4x3 - все они используют. Не знаю, почему. Могли бы они каким-то образом нормализоваться с 4x4 до 4x3, а затем затмевать с векторными матрицами 1x3, вместо того, чтобы нормализовать результат 1x4 до 1x3? Это вещь для исполнения? –
Документ утверждает, что они используют внутри себя 4x4, хотя, вероятно, в матричном мультикодном коде есть определенная оптимизация. Но описанный 4x3 - это внешний интерфейс. POV-RAY использует созданный пользователем текстовый файл для определения сцены для рендеринга, поэтому уменьшение количества данных, которые пользователь должен вводить вручную, экономит время и снижает вероятность ошибки. Стандартные преобразования имеют дальний столбец (0 0 0 1), и когда они объединены, результат также имеет этот дальний столбец, поэтому можно сохранить несколько операций, предположив это. Стоимость заключается в том, что у вас есть не общая матричная реализация. – walkytalky