- •Лабораторная работа №2
- •Содержание
- •Постановка задачи.
- •Структура решения.
- •Обзор и анализ методов решения задачи.
- •Вычисление координат точки при аксонометрическом проецировании.
- •Вычисление координат точки при перспективном проецировании.
- •Вычисление координат точек при перспективном проецировании.
- •Описание применяемых методов.
- •Вычисление координат точек при аксонометрическом проецировании.
- •Руководство программиста.
- •Руководство пользователя.
- •Результаты.
-
Вычисление координат точки при аксонометрическом проецировании.
Аксонометрическая проекция – это проекция, когда все лучи проецирования параллельны и перпендикулярны к плоскости проецирования. Аксонометрическое проектирование относится к сложным преобразованиям, но его можно свести к последовательности простых, опирая на свойство аффинных преобразований. Поворот к точке наблюдения (к камере) можно представить как два поворота: сначала вокруг одной оси, потом вокруг другой.
Зададим точку наблюдения C (a, b, c) в произвольной ортогональной системе координат.
Для того чтобы получить картинку, наблюдаемому из положения камеры нужно:
Шаг1. Поворот системы координат, чтобы точка С располагалась на оси Оz. (А для того чтобы это случилось необходимо повернуть систему координат сначала вокруг оси Ох, а затем вокруг оси Оу.)
Шаг2. Вычисление матрицы аксонометрического проецирования.
Шаг3. Осуществление перехода к экранным координатам.
-
Поворот системы координат на угол φ вокруг оси X (разворачиваем систему координат по часовой стрелке - это тоже самое, что разворот точки против часовой стрелки).

![]()
-
Поворот системы координат вокруг оси ординат Y’ на угол ψ:

![]()
3) Проецирование вдоль оси Z’’ на плоскость X’’OY’’.
.
Для получения видовых координат можно просто отбросить координату z, минуя 3-й пункт.
В матричном виде координаты точек представляются в виде строк, поэтому для выполнения операции умножения координатной строки на матрицу, нужно координатную строку умножать слева на транспонированную матрицу.
Таким образом, общее преобразование координат выглядит следующим образом:
;
.
После преобразования по этой формуле координат следующих точек:
-
Точку Т.
-
Проекции токи Т на плоскости xOy, xOz и yOz – Т1, Т2 и Т3 соответственно.
-
Проекции токи Т на оси Ox, Oy и Oz – Tx, Ty и Tz соответственно.
-
Точку С.
-
Точки необходимые для рисования осей.
мы получим искомую картинку.
К исключительным ситуациям в данном подходе можно отнести попадание камеры в начало координат, тогда при пересчете возникнет деление на ноль. Этого допускать не следует, поэтому если камера окажется в начале координат, то будем выводить соответствующее значение, а картинку не рисовать картинку.
-
Вычисление координат точки при перспективном проецировании.
Построение перспективного изображения (центральное проецирование) является более сложной задачей, так как в данном случае необходимо учитывать расстояние от центра проецирования до объекта.
Основные свойства перспективного преобразования в центральной проекции:
-
Не сохраняется отношение длин и площадей.
-
Прямые линии изображаются прямыми линиями.
-
Параллельные прямые изображаются сходящимися.
Для реализации центрального проецирования необходимо выполнить следующие шаги:
Шаг1. Поворот системы координат, чтобы точка С располагалась на оси Z.
Шаг2. Вычисление матрицы центрального проецирования для этого частного случая.
Шаг3. Осуществление перехода к экранным координатам.
Перемещать камеру на ось Oz мы научились когда рассматривали аксонометрическое проецирование, поэтому предположим, для простоты, что центр проектирования лежит на оси Z в точке С(0,0,d) и плоскость проецирования совпадает с координатной плоскостью xOy. Возьмем в пространстве произвольную точку М(x,y,z), проведем через нее и точку С прямую, которая в пересечении с системой координат экрана (плоскостью XOY) даст точку M’ (x’,y’). Запишем соответствующие параметрические уравнения:
x’ = x*t
y’ = y*t
z’ = d + (z-d)*t
Найдем координаты точки пересечения построенной прямой с плоскостью xOy, из условия z’ = 0 получим:
;
;
.
Аналогичного результата можно добиться, используя следующую матрицу:
.
Эта матрица называется матрицей перспективного преобразования с проецированием d.
,
где a,
b,
c
– знакомые нам координаты камеры.
В самом деле, переходя к однородным координатам, прямым вычислением легко проверить, что
.
Используя свойства однородных координат, это можно записать в следующем виде:
.
Переход к экранным координатам осуществляется посредством следующей формулы:
,
где Cx,
Cy
– координаты смещения.
Прорисовка выполняется так же как описано в лабораторной работе №1.
К исключительным ситуациям в данном подходе можно отнести попадание камеры в начало координат (деление на 0), попадание камеры внутрь параллелепипеда, или выход картинки за экран (переполнение). Этого допускать не следует, поэтому если камера зайдет в запрещенную зону, будем выводить соответствующее сообщение.
Отрисовка.
Этот пункт подробно рассматривался в лабораторной работе №1
Также добавляется переменная состояние, в которой хранятся состояния в критических_случаях:
если (состояние=камера_внутри)
вывод сообщения (Камера внутри)
если (состояние=выход за границы)
вывод сообщения (Выход за границы)
