Нетрудно преобразовать «обычное» представление точки или вектора (как упорядоченную тройку в случае трехмерных объектов и упорядоченную пару - в случае двумерных) в однородную форму. Для перехода от обычных координат к однородным необходимо: Если объект является точкой, то добавить 1. Если объект - вектор, то добавить 0.
Для перехода от однородных координат к обычным необходимо: Если объект - вектор, то его последняя координата равна 0. Удалить этот 0. Если объект - точка, то ее последняя координата равна 1. Удалить эту 1.
Где можно покататься на лошадях спб и лен. Где можно покататься ребенку на лошади в спб. Лепные изделия из архитектурного бетона тут.
1 На самом деле мы прошли лишь часть пути при рассмотрении этого вопроса. Как мы увидим в главе 7, где мы будем изучать проекции, однородные координаты предоставят там возможность дополнительной операции, которая сделает их действительно однородными. Однако до изучения проекций нам нет необходимости вводить эту операцию.
2 В случае двух измерении точки являются тропками вида (ргр2, 1), а векторы - тройками вида (»,, и2,0).
Векторные инструменты для графики
OpenGL использует четырехмерные однородные координаты для всех вершин своих объектов. Если вы посылаете в OpenGL тройку в виде (х, у, z), она немедленно преобразуется к виду (х, у, z, 1), Если же вы посылаете в него двумерную точку (х, у), то он первым делом добавит 0 в качестве z-компонента, а затем 1, в результате чего получится (х, у, О, 1). Все вычисления внутри OpenGL производятся в четырехмерных однородных координатах.
Линейные комбинации векторов Многие действия можно успешно производить в однородных координатах путем покоординатного оперирования с векторами. Все определения и операции сохраняются.
О Разность двух точек (х, у,г,1)и (и, v,w,l) равна (х - и, у -v,z-w, 0), то есть, как и ожидалось, является вектором.
О Сумма точки (х, y,z,l)n вектора (d, e,f, 0) равна (х + d, у + е, z + /, 1), то есть другой точке.
О Два вектора можно складывать: (d, e,f, 0) + (m, n,r,0) = (d+m,e + n,f+ r, 0), в результате получается другой вектор.
О Имеет смысл масштабирование вектора: 3(d, e,f, 0) = (3d, Зе, 3/, 0).