- •1. Аффинные преобразования на плоскости
- •2. Однородные координаты точки
- •Аффинные преобразования в пространстве
- •Виды проектирования
- •Параллельное проектирование
- •Центральное проектирование
- •Обобщенный алгоритм геометрических преобразований точки в пространстве
- •Пример построения перспективной проекции многогранника, заданного своими вершинами
Обобщенный алгоритм геометрических преобразований точки в пространстве
Учитывая все сказанное выше о геометрических преобразованиях точки на плоскости и в пространстве, необходимо отметить следующее:
1. Каждую точку трехмерной структуры можно представить в однородных координатах в виде (x у z 1).
2. Преобразования точки (поворот, растяжение или сжатие, отражение, перенос) реализуются с помощью матриц (18). Более сложное преобразование представляет собой комбинацию указанных четырех преобразований и требует предварительного расчета матрицы (9).
3. Перспективная проекция каждой точки может быть получена с помощью матрицы Q (22).
4. После применения матрицы Q необходимо первую и вторую координаты разделить на последний элемент полученного вектора координат, то есть на (1 - z / с), чтобы получить координаты (21) перспективной проекции точки на картинной плоскости.
Таким образом, можно объединить весь комплекс преобразований в один программный модуль, на вход которого должны поступать:
- значения координат точки;
- углы поворота;
- коэффициенты расширения (сжатия);
- параметры переноса;
- параметр c, определяющий центр перспективного преобразования.
Выходными параметрами являются значения координат xp и yp перспективной проекции точки.
В некоторых системах это обобщенное преобразование частично или полностью реализуется аппаратными средствами, что значительно увеличивает скорость выполнения задачи.
Пример построения перспективной проекции многогранника, заданного своими вершинами
Многогранник в трехмерном пространстве может быть задан координатами своих вершин. Эти координаты образуют матрицу координат, аналогичную матрице, рассмотренной в параграфе 3 для двумерного случая. Все сказанное ранее о геометрических преобразованиях точки в пространстве, справедливо и для матрицы координат.
Рассмотрим в качестве примера куб с длиной ребра, равной 2 (рис.19). Пусть необходимо сначала выполнить перенос куба по оси Z на величину z0 (рис.20), а затем получить перспективную проекцию этого объекта.
Матрица, задающая координаты вершин исходного куба, имеет вид:
A -1 2 2 1
B 1 2 2 1
C -1 0 2 1
D 1 0 2 1
E -1 2 0 1
F 1 2 0 1
G -1 0 0 1
L 1 0 0 1
Для выполнения переноса используется матрица T (8), где = 0, = 0, = z0. Умножив матрицу координат вершин исходного куба на матрицу T, получим матрицу однородных координат вершин куба после переноса:
-1 2 2 1 -1 2 2+z0 1 A*
1 2 2 1 1 2 2+z0 1 B*
-1 0 2 1 1 0 0 0 -1 0 2+z0 1 C*
1 0 2 1 0 1 0 0 = 1 0 2+z0 1 D*
-1 2 0 1 0 0 1 0 -1 2 z0 1 E*
1 2 0 1 0 0 z0 1 1 2 z0 1 F*
-1 0 0 1 -1 0 z0 1 G*
1 0 0 1 1 0 z0 1 L*
Чтобы построить перспективную проекцию объекта, необходимо полученную матрицу умножить на матрицу Q:
-1 2 2+z0 1 -1 2 0 1 - (2+z0)/c
1 2 2+z0 1 1 2 0 1 - (2+z0)/c
-1 0 2+z0 1 1 0 0 0 -1 0 0 1 - (2+z0)/c
1 0 2+z0 1 0 1 0 0 = 1 0 0 1 - (2+z0)/c
-1 2 z0 1 0 0 0 -1/c -1 2 0 1 - z0/c
1 2 z0 1 0 0 0 1 1 2 0 1 - z0/c
-1 0 z0 1 -1 0 0 1 - z0/c
1 0 z0 1 1 0 0 1 - z0/c
Теперь необходимо 1-й и 2-й элементы каждой строки разделить на последний элемент этой же строки. Получим матрицу однородных координат перспективных проекций вершин куба, представленного на рис. 20:
A* -1/ (1-(2+z0)/c) 2/ (1-(2+z0)/c) 0 1
B* 1/ (1-(2+z0)/c) 2/ (1-(2+z0)/c) 0 1
C* -1/ (1-(2+z0)/c) 0 0 1
D* 1/ (1-(2+z0)/c) 0 0 1
E* -1/ (1 - z0 / c ) 2/ (1 - z0 / c ) 0 1
F* 1/ (1 - z0 / c ) 2/ (1 - z0 / c ) 0 1
G* -1/ (1 - z0 / c ) 0 0 1
L* 1/ (1 - z0 / c ) 0 0 1
Перейдем теперь от однородных координат к обычным (для этого необходимо отбросить в матрице последний столбец), и вычислим значения элементов данной матрицы, например, при z0 = 2 и c = 8. Получим:-
A* -2 4 0
B* 2 4 0
C* -2 0 0
D* 2 0 0
E* -4/3 8/3 0
F* 4/3 8/3 0
G* -4/3 0 0
L* 4/3 0 0
Это и есть координаты проекций вершин заданного куба (рис.20) на плоскость YX. Соединяя вершины прямыми, получим перспективное изображение куба (рис.21).