@shweps123

Зачем нужны однородные координаты?

Здравствуйте. Объясните, пожалуйста, в чем суть однородных координат? Зачем в матрицах преобразований нужен четвертый компонент, если можно обойтись матрицей 3х3? Можно пример из компьютерной графики, когда 4ый компонент действительно нужен?
  • Вопрос задан
  • 13455 просмотров
Пригласить эксперта
Ответы на вопрос 4
Mrrl
@Mrrl
Заводчик кардиганов
По большому счёту, однородные координаты нужны с единственной целью - чтобы при получении экранных координат точки не нужно было различать ортогональную и перспективную проекции. В остальных ситуациях их полная поддержка была бы только лишней тратой ресурсов.
Сразу надо сказать, что матрицей 3*3 вы не обойдётесь. Такие матрицы описывают только поворот, а в перемещениях объекта и камеры в 3D есть ещё сдвиги. Поэтому нужна матрица, по меньшей мере, 3*4 (в конвенции компьютерной графики, когда вектор это строка а не столбец).
В терминах линейной алгебры пользоваться такими матрицами неудобно, поэтому к ним добавляют столбец (0,0,0,1), а к координатам точки - четвёртую координату 1. Де-факто мы при этом получаем проективное пространство, представленное однородными координатами. Но при любых операциях над матрицами и точками у нас последний столбец всегда будет (0,0,0,1), а последняя координата точки - 1.
Если знать это, то можно хорошо сэкономить: для хранения матрицы хватит 12 чисел вместо 16, для перемножения двух матриц - 36 умножений вместо 64, а для умножения матрицы на точку - 9 умножений вместо 16. Надеюсь, что в реальных проектах так и делают.
Но есть одно место, где последний столбец не равен (0,0,0,1), и четвёртая координата точки может отличаться от 1 - это перспективная матрица для вывода на экран (ссылку вам уже дали). Для вывода точки (x,y,z) результат её применения может быть, условно, (x,y,z,1) - тогда имеет место ортогональная проекция, и выведется точка (x,y), а может - (x,y,-1,z) - тогда координаты точки окажутся (x/z,y/z), и проекция будет перспективной. Хватило бы одного бита - как интерпретировать точку, делить ли на z. Но разработчики компьютерной графики решили, что матрица 4*4 и однородные координаты - это более эффективно. Им виднее.
Ответ написан
@Peppa
Однородные координаты нужны чтобы изучать проективные преобразования. На самом деле, я точно не знаю, где в компьютерной графике применяются именно трехмерное проективное пространство, но проективная плоскость действительно возникает часто.

Например, пусть на столе лежит вырезанный из бумаги плоский многоугольник. Тогда, если Вы сделаете фотографию, то совершите отображения плоскости стола на плоскость фотографии, а Ваш многоугольник отобразится в некоторый другой многоугольник. Такое преобразование нельзя описать матрицей 2x2, хоть Вы и совершили преобразование "плоскости" на себя. Поэтому, чтобы адекватно изучать такого рода преобразования нужны однородные координаты.

Это важно в задаче распознавания. Например, у Вас есть фотография какого-то объекта в базе данных. Затем Вы хотите найти этот объект на другой фотографии. Т.к. при фотографировании Вы совершаете проективные преобразования, то нужно искать какие-то характеристики, которые не меняются при таких преобразованиях, т.е. инварианты. Затем можно написать программу, которая считала бы эти инварианты, и таким образом сравнивала объекты на снимках между собой.
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
Все распространённые преобразования (сдвиги, повороты, проецирование) можно реализовать матрицей 4×4.
Ответ написан
Комментировать
@potan
Функциональный программист
Точнее и удобнее работать с удаленными точками. Фактически в них можно задать направление на бесконечно удаленную точку и она не будет отличаться от обычных точек.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы