Из того, что я узнал, так как я еще и учусь, то, что вы хотите работать с матрицами, чтобы обрабатывать повороты, масштабирование и переводы одинаково, то есть умножать на матрицу (т.е. , а матрицы).4×44×4
Помните, что без этих матриц переводы были бы представлены суммированием с вектором, тогда как вращения и масштабирование представлены с использованием умножений с вектором и скалярным коэффициентом соответственно.4×4
Теперь вопрос: как перейти от трехмерных систем координат к четырехмерным ? Ответ - " однородные координаты ".
Итак, что это значит? Мы строим матрицы × для представления поворотов, масштабирования и сдвига, поэтому мы используем только умножения матриц для представления преобразований (например, поворотов, масштабирования и т. Д.). Как мы их строим индивидуально, это более конкретно, но вы можете посмотреть его в Интернете.4×4
На данный момент у нас есть умножить на матрицы и трехмерные векторы, но пока это не полезно, потому что вы не можете умножить умножить на матрицы и векторы, поскольку размеры не совпадают. Вот почему, когда мы работаем с гомогенными координатами, нам также необходимо преобразовать наши заданные трехмерные точки в соответствующие четырехмерные.4×44×43D
Как мы делаем это?
Мы различаем векторы направления и положения . Векторы направления, как следует из названия, имеют направление, на которое они указывают; мы также заботимся об их длине, но на них не влияют переводы, так как нас не заботит их положение. Векторы положения (или просто «точки») могут быть переведены или перемещены; они обычно представлены относительно начала координат, то есть как вектор от начала координат до самой точки.
Мы преобразуем трехмерные векторы направления, добавляя в качестве й координаты соответствующего однородного вектора: мы добавляем ноль, потому что это в основном устраняет эффект трансляций. Мы делаем то же самое с векторами положения, но вместо мы добавляем по противоположной причине.0401
Например, если у нас есть вектор направления , мы преобразуем его, выполнив . Аналогично, если бы у нас был точечный вектор мы бы преобразовали его в3Dv=⎛⎝⎜v1v2v3⎞⎠⎟v′=⎛⎝⎜⎜⎜v1v2v30⎞⎠⎟⎟⎟u=⎛⎝⎜u1u2u3⎞⎠⎟u′=⎛⎝⎜⎜⎜u1u2u31⎞⎠⎟⎟⎟
Примечание: чтобы преобразовать из однородных координат обратно в соответствующие , вы не можете просто удалить координату, если она по- прежнему не равна (или соответственно).3D4th10