Реферат: Трехмерная графика Теория
Аксонометрическая проекция - проектирующие прямые перпендикулярны картинной плоскости .
Различают три вида проекций в зависимости от взаимного расположения плоскости проектирования и координатных осей:
триметрия-нормальный вектор картинной плоскости образует с ортами координатных осей попарно различные углы(рис.15);
диметрия-два угла между нормалью картинной плоскости и координатными осями равны (рис. 16).
- изометрия-все три угла между нормалью картинной плоскости и координатными осями равны (рис. 17).
Каждый из трех видов указанных проекций получается комбинацией поворотов, за которой следует параллельное проектирование.
Перспективные (центральные) проекции строятся более сложно . Предположим что центр проектирования лежит на оси Z - C (0,0,c) а плоскость проектирования совпадает с координатной плоскостью XOY (рис. 19) . Возьмем в пространстве произвольную точку M(x,y,z), проведем через нее и точку С прямую и запишем ее параметрические уравнения . Имеем:
X`= xt , Y`=yt, Z`= c+(z-c)t
Найдем координаты точки пересечения этой прямой с плоскостью XOY. Из того , что z`=0, получаем
Тот же самый результат мы получим, привлекая матрицу
В самом деле,
Mатрица проектирования, конечно, вырождена ; матрица же соответствующего перспективного преобразования(без проектирования) имеет следующий вид
Язык С++ предоставляет очень удобные средства, позволяющие заметно упростить работу с векторами и преобразованиями в пространстве.
Рассмотрим реализацию работы с векторами.
// Файл vector.h
#ifndef __VECTOR__#define __VECTOR__#include <math.h>class Vector{public: double x, y, z; Vector () {}; Vector ( double v ) { x = y = z = v; };
Vector ( const Vector& v ) { x = v.x; y = v.y; z = v.z; };
Vector ( double vx, double vy, double vz ) { x = vx; y = vy; z = vz; };
Vector& operator = ( const Vector& v ) { x = v.x; y = v.y; z = v.z;
return *this; }
Vector& operator = ( double f ) { x = y = z = f; return *this; };
Vector operator - () const;
Vector& operator += ( const Vector& );
Vector& operator -= ( const Vector& );
Vector& operator *= ( const Vector& );