Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3d.doc
Скачиваний:
8
Добавлен:
06.11.2018
Размер:
412.16 Кб
Скачать

Обобщенный алгоритм геометрических преобразований точки в пространстве

Учитывая все сказанное выше о геометрических преобразованиях точки на плоскости и в пространстве, необходимо отметить следующее:

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).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]