Реферат: Трехмерная графика. Теория - текст реферата. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Реферат

Трехмерная графика. Теория

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Microsoft Word, 344 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникального реферата

Узнайте стоимость написания уникальной работы

Трехмерная графика Краткие теоретические сведения. Каждая точка п ространства (кроме н ачальной точки О ) может быть задана четвер кой одновременно не равных нулю чисел ((x,y,z,1) или , более обще , (hx,hy,hz,h), где ). Эта четверка опреде лена однозначно с точностью до общего множителя . Предложенный подход дает во зможность воспользоваться матричной записью и в более сложных , трехмерных задачах. Как известно , любое аффинное преобразован ие в трехмерном пространстве может быть п редставлено в виде суперпозиции вращений растяжений , отражений и переносов . Поэтому д остаточно подробно описать матрицы только эти х последних преобразований. A. Матрицы вращения в пространстве. Матрица вращения вокруг оси абсцисс н а угол q: Матрица вращения вокруг оси ординат н а угол w: Матрица вращения вокруг оси аппли кат на угол x: Б . Матрица растяжения (сжатия ): здесь a>0 - коэффициент растяже ния (сжатия ) вдоль оси абсцисс ,b>0-коэффициент растяжения (сжатия ) вдоль оси ординат ,y>0-коэффициент раст яжения (сжатия ) вдоль оси аппликат. В . Матрица отражения . Матрица отражения относительно плоскости xOy: Матрица отражения относительно плоскости yOz: Матрица отражения относительно плоскости zOx: Г . Матрица переноса : Здесь (r,q,v)-вектор переноса. Заметим , что , как и в двумерном слу чае , все выписанные матрицы не вырождены. Ортографическая проекция - картинная плоскость совпадает с одной из координатных плоско стей или параллельна ей . Матрица проекти рования вдоль оси Х на плоскость YOZ имеет вид В случае , если плоскость п роектирования параллельна координатной плоскости , необходи мо умножить матрицу [Px] на матрицу сдвига . Имеем Аналогично записываются матрицы проектирован ия вдоль 2-х координатных осей : Аксонометрическая проекция - проекти рующие прямые перпендикулярны картинной плоскости . Различают три вида проекций в зависим ости от взаимного расположения плоскости прое ктирования и координатных осей : триметрия-нормальный вектор картинной плоскос ти образует с ортами координатных осей по парн о различные углы (рис .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 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& ); Vector& operator *= ( double ); Vector& operator /= ( double ); friend Vector operator + ( const Vector&, const Vector& ); friend Vec tor operator - ( const Vector&, const Vector& ); friend Vector operator * ( const Vector&, const Vector& ); friend Vector operator * ( double, const Vector& ); friend Vector operator * ( const Vector&, double ); friend Vector operator / ( const Vector& , double ); friend Vector operator / ( const Vector&, const Vector& ); friend double operator & ( const Vector& u, const Vector& v ) return u.x * v.x + u.y * v.y + u.z * v.z; ; friend Vector operator ^ ( const Vector&, const Vector& ); double opera tor ! () return (double) sqrt ( x * x + y * y + z * z ); ; double& operator [] ( int n ) return *( &x + n ); ; int operator < ( double v ) return x < v && y < v && z < v; ; int operator > ( double v ) return x > v && y > v && z > v; ; ; cl ass Ray public: Vector Org; Vector Dir; Ray () ; Ray ( Vector& o, Vector& d ) Org = o, Dir = d; ; Vector Point ( double t ) return Org + Dir * t; ; ; inline Vector Vector :: operator - () const return Vector ( -x, -y, -z ); inline Vector operator + ( const Vector& u, const Vector& v ) return Vector ( u.x + v.x, u.y + v.y, u.z + v.z ); inline Vector operator - ( const Vector& u, const Vector& v ) return Vector ( u.x - v.x, u.y - v.y, u.z - v.z ); inline Vector oper ator * ( const Vector& u, const Vector& v ) return Vector ( u.x * v.x, u.y * v.y, u.z * v.z ); inline Vector operator * ( const Vector& u, double f ) return Vector ( u.x * f, u.y * f, u.z * f ); inline Vector operator * ( double f, const Vector& v ) return Vector ( f * v.x, f * v.y, f * v.z ); inline Vector operator / ( const Vector& u, const Vector& v ) return Vector ( u.x / v.x, u.y / v.y, u.z / v.z ); inline Vector operator / ( cons t Vector& u, double f ) return Vector ( u.x / f, u.y / f, u.z / f ); inline Vector& Vector :: operator += ( const Vector& v ) x += v.x; y += v.y; z += v.z; return *this; inline Vector& Vector :: operator -= ( const Vector& v ) x -= v.x; y -= v.y; z -= v.z; return *this; inline Vector& Vector :: operator *= ( const Vector& v ) x *= v.x; y *= v.y; z *= v.z; return *this; inline Vector& Vector :: operator *= ( double v ) x *= v; y *= v; z *= v; return *this; inline Ve ctor& Vector :: operator /= ( double v ) x /= v; y /= v; z /= v; return *this; inline Vector Normalize ( Vector& v ) return v / !v; Vector RndVector (); Vector& Clip ( Vector& v ); #endif ---------------------------------------------------------------------------- // Файл vector.срр #include #include #include "vector.h" Vector operator ^ ( const Vector& u, const Vector& v ) return Vector ( u.y * v.z - u.z * v.y, u.z * v.x - u.x * v.z, u.x * v.y - u.y * v.x ); Vector RndVector () Vector v ( rand () - 0.5 * RAND_MAX, rand () - 0.5 * RAND_MAX, rand () - 0.5 * RAND_MAX ); return Normalize ( v ); Vector& Clip ( Vector& v ) if ( v.x < 0.0 ) v.x = 0.0; else if ( v.x > 1.0 ) v.x = 1.0; if ( v.y < 0.0 ) v.y = 0.0; else if ( v.y > 1.0 ) v.y = 1.0; if ( v.z < 0.0 ) v.z = 0.0; else if ( v.z > 1.0 ) v.z = 1.0; return v; С этой целью создается класс Vector , содержащий в себе компоненты вектора , и для это го класса переопределяются основные знаки операций. - - унарный минус и поэлементное вычитани е векторов ; + - поэлементное сложение векторов ; * - умножение вектора на число ; * - поэлементное умножение векторов ; / - деление вектора на число ; / - поэлементно е деление векторов ; & - скалярное произведение векторов ; ^ - векторное произведение ; ! - длина вектора ; [] - компонента вектора. При этом стандартные приоритеты операций сохраняются. Кроме этих операций определяются также некоторые простейшие функции для работы с векторами : Normalize – нормирование вектора ; RndVector – получение почти равномерно распределенного слу чайного единичного вектора ; Clip – отсечение вектора. С использованием этого класса можно в естественной и удобной форме записывать сложные вект орные выражения. Аналогичным образом вводится класс Matrix , служащий для представления матриц преобразований в тре хмерном пространстве . Для этого класса также производится переопределение основных знаков операций. // Файл matrix . h #ifndef __MATRIX__ #defin e __MATRIX__ #include "vector.h" class Matrix public: double x [4][4]; Matrix () ; Matrix ( double ); Matrix& operator += ( const Matrix& ); Matrix& operator -= ( const Matrix& ); Matrix& operator *= ( const Matrix& ); Matrix& operator *= ( do uble ); Matrix& operator /= ( double ); void Invert (); void Transpose (); friend Matrix operator + ( const Matrix&, const Matrix& ); friend Matrix operator - ( const Matrix&, const Matrix& ); friend Matrix operator * ( const Matrix&, double ); friend Matrix operator * ( const Matrix&, const Matrix& ); friend Vector operator * ( const Matrix&, const Vector& ); ; Matrix Translate ( const Vector& ); Matrix Scale ( const Vector& ); Matrix RotateX ( double ); Matrix RotateY ( double ); Matrix Rot ateZ ( double ); Matrix Rotate ( const Vector&, double ); Matrix MirrorX (); Matrix MirrorY (); Matrix MirrorZ (); #endif //--------------------------------------------------------------------------- // Файл matrix.cpp #include #include "matrix. h"Matrix :: Matrix ( double v ) int j; for ( int i = 0; i < 4; i++ ) for ( j = 0; j < 4; j++ ) x [i][j] = ( i == j ) ? v : 0.0; x [3][3] = 1; void Matrix :: Invert () Matrix Out ( 1 ); for ( int i = 0; i < 4; i++ ) double d = x [i][i]; if ( d != 1.0 ) for ( int j = 0; j < 4; j++ ) Out.x [i][j] /= d; x [i][j] /= d; for ( int j = 0; j < 4; j++ ) if ( j != i ) if ( x[j][i] != 0.0 ) double mulby = x[j][i]; for ( int k = 0; k < 4; k++ ) x [j][k] -= mulby * x [i][k]; Out.x [j][k] -= mulby * Out.x [i][k]; *this = Out; void Matrix :: Transpose () double t; int j; for ( int i = 0; i < 4; i++ ) for ( j = 0; j < 4; j++ ) if ( i != j ) t = x [i][j]; x [i][j] = x [j][i]; x [j][i] = t; Matrix& Matrix :: operator += ( const Matrix& A ) int j; for ( int i = 0; i < 4; i++ ) for ( j = 0; j < 4; j++ ) x [i][j] += A.x [i][j]; return *this; Matrix& Matrix :: operator -= ( const Matrix& A ) int j; for ( int i = 0; i < 4; i++ ) for ( j = 0; j < 4; j++ ) x [i][j] -= A.x [i][j]; return *this; Matrix& Matrix :: operator *= ( double v ) int j; for ( int i = 0; i < 4; i++ ) for ( j = 0; j < 4; j++ ) x [i][j] *= v; return *this; Matrix& Matrix :: operator *= ( const Matrix& A ) Matrix res = *this; int j; for ( int i = 0; i < 4; i++ ) for ( j = 0; j < 4; j++ ) double sum = 0; for ( int k = 0; k < 4; k++ ) sum += res.x [i][k] * A.x [k][j]; x [i][j] = sum; return *this ; Matrix operator + ( const Matrix& A, const Matrix& B ) Matrix res; int j; for ( int i = 0; i < 4; i++ ) for ( j = 0; j < 4; j++ ) res.x [i][j] = A.x [i][j] + B.x [i][j]; return res; Matrix operator - ( const Matrix& A, const Matrix& B ) Matrix res; int j; for ( int i = 0; i < 4; i++ ) for ( j = 0; j < 4; j++ ) res.x [i][j] = A.x [i][j] - B.x [i][j]; return res; Matrix operator * ( const Matrix& A, const Matrix& B ) Matrix res; int j; for ( int i = 0; i < 4; i++ ) for ( j = 0; j < 4; j++ ) double sum = 0; for ( int k = 0; k < 4; k++ ) sum += A.x [i][k] * B.x [k][j]; res.x [i][j] = sum; return res; Matrix operator * ( const Matrix& A, double v ) Matrix res; int j; for ( int i = 0; i < 4; i++ ) for ( j = 0; j < 4; j++ ) res.x [i][j] = A.x [i][j] * v; return res; Vector operator * ( const Matrix& M, const Vector& v ) Vector res; res.x = v.x * M.x [0][0] + v.y * M.x [1][0] + v.z * M.x [2][0] + M.x [3][0]; res.y = v.x * M.x [0][1] + v.y * M.x [1][1] + v.z * M.x [2][1] + M.x [3][1]; res.z = v.x * M.x [0][2] + v.y * M.x [1][2] + v.z * M.x [2][2] + M.x [3][2]; double denom = v.x * M.x [0][3] + v.y * M.x [1][3] + v.z * M.x [2][3] + M.x[3][3]; if ( denom != 1.0 ) res /= denom; return res; Matrix Translate ( const Vector& Loc ) Matrix res ( 1 ); res.x [3][0] = Loc.x; res.x [3][1] = Loc.y; res.x [3][2] = Loc.z; return res; ; Matrix Scale ( const Vector& v ) Matrix res ( 1 ); res.x [0][0] = v.x; res.x [1][1] = v.y; res.x [2][2] = v.z; return res; ; Matrix RotateX ( double Angle ) Matrix res ( 1 ); double Cosine = cos ( Angle ); double Sine = sin ( Angle ); res.x [1][1] = Cosine; res.x [2][1] = - Sine; res.x [1][2] = Sine; res.x [2][2] = Cosine; return r es; ; Matrix RotateY ( double Angle ) Matrix res ( 1 ); double Cosine = cos ( Angle ); double Sine = sin ( Angle ); res.x [0][0] = Cosine; res.x [2][0] = - Sine; res.x [0][2] = Sine; res.x [2][2] = Cosine; return res; ; Matrix RotateZ ( double Angle ) Matrix res ( 1 ); double Cosine = cos ( Angle ); double Sine = sin ( Angle ); res.x [0][0] = Cosine; res.x [1][0] = - Sine; res.x [0][1] = Sine; res.x [1][1] = Cosine; return res; ; Matrix Rotate ( const Vector& axis, double angle ) Matrix res ( 1 ); double Cosine = cos ( angle ); double Sine = sin ( angle ); res.x [0][0] = axis.x * axis.x + ( 1 - axis.x * axis.x ) * Cosine; res.x [0][1] = axis.x * axis.y * ( 1 - Cosine ) + axis.z * Sine; res.x [0][2] = ax is.x * axis.z * ( 1 - Cosine ) - axis.y * Sine; res.x [0][3] = 0; res.x [1][0] = axis.x * axis.y * ( 1 - Cosine ) - axis.z * Sine; res.x [1][1] = axis.y * axis.y + ( 1 - axis.y * axis.y ) * Cosine; res.x [1][2] = axis.y * axis.z * ( 1 - Cosine ) + axis.x * Sine; res.x [1][3] = 0; res.x [2][0] = axis.x * axis.z * ( 1 - Cosine ) + axis.y * Sine; res.x [2][1] = axis.y * axis.z * ( 1 - Cosine ) - axis.x * Sine; res.x [2][2] = axis.z * axis.z + ( 1 - axis.z * axis.z ) * Cosine; res.x [2][3] = 0; res.x [3][0] = 0; res.x [3][1] = 0; res.x [3][2] = 0; res.x [3][3] = 1; return res; ; Matrix MirrorX () Matrix res ( 1 ); res.x [0][0] = -1; return res; ; Matrix MirrorY () Matrix res ( 1 ); res.x [1][1] = -1; return res; ; Matrix MirrorZ () Matrix res ( 1 ); res.x [2][2] = -1; return res; В следующей библиотеке была реализована работа с трехмерными объектами : гранью , г рафическим объектом и пространством . Реализованы следующие возмо жности : поворот объектов вокруг координатных осей ; зеркальное отображение объектов по отноше нию к координатным осям ; центральное и параллельное проектирование ; масштабирование объектов ; удаление невидимых поверхностей ; перемещение объектов в пространстве. // Файл 3dworks.h #ifndef __3DWORKS__#define __3DWORKS__#include #include #include "vector.h" #include "matrix.h" #define OneSd 0 #define TwoSds 1 #define MaxPoints 10 #define MaxFacets 10 #define MaxObjects 10 class Polygon public: int PointNumber; Vector * Point; Vector Normal; Vector Center; int Color; int TwoSides; Polygon () ; Polygon ( Vector *, int, int, int ); void Draw ( const Vector& ); void Move ( const Vector& ); void Rotate ( double, double, double ); void PolyScale ( const Vector& ); void PolyMirrorX (); void PolyMirrorY (); void PolyMirrorZ (); ; class GrObject public: int FacetNumber; Polygon * Facet; Vector Coords; GrObject () ; GrObject ( Polygon *, int, const Vector& ); void Move ( const Vector& ); void Rotate ( double, double, double ); void ObjScale ( const Vector& ); void ObjMirrorX (); void ObjMirrorY (); void ObjMirrorZ (); ; struct BSPNode Polygon * Poly; double d; BSPNode * Left; BSPNode * Right; ; class Space public: int ObjectNumber; GrObject * Object [MaxObjects]; Space () ObjectNumber = 0; ; Space ( GrObject *, int ); void Add ( GrObject * ); void Draw ( const Vector& ); ; int IsVisible ( const Polygon&, const Vector& ); void DrawBSPTree ( BSPNode *, const Vector& ); #endif //---------------------------------------------------------------------------- // Файл 3dworks.cpp #include "3dworks.h"// Polygon's methodsPolygon :: Polygon ( Vector * PointArr, int PointNum, int Col , int TS ) if ( PointNum <= MaxPoints ) PointNumber = PointNum; Point = PointArr; Color = Col; TwoSides = TS; Normal = Normalize ( ( Point [1] - Point [0] ) ^ ( Point [PointNumber-1] - Point [0] )); Center = 0; for ( int i = 0; i < PointNumber; i++ ) Center += Point[i]; Center /= PointNumber; void Polygon :: Move ( const Vector& v ) Matrix m = Translate ( v ); for ( int i = 0; i < PointNumber; i++ ) Point[i] = m * Point[i]; Center = m * Center; void Polygon :: Rotate ( double Alfa, d ouble Beta, double Gamma ) Matrix m = RotateX ( Alfa ) * RotateY ( Beta ) * RotateZ ( Gamma ); for ( int i = 0; i < PointNumber; i++ ) Point[i] = m * Point[i]; Normal = m * Normal; Center = m * Center; void Polygon :: PolyScale ( const Vector& v ) Matrix m = Scale ( v ); for ( int i = 0; i < PointNumber; i++ ) Point[i] = m * Point[i]; Center = m * Center; void Polygon :: PolyMirrorX () Matrix m = MirrorX(); for ( int i = 0; i < PointNumber; i++ ) Point[i] = m * Point[i]; Center = m * Center; Normal = m * Normal; void Polygon :: PolyMirrorY () Matrix m = MirrorY(); for ( int i = 0; i < PointNumber; i++ ) Point[i] = m * Point[i]; Center = m * Center; Normal = m * Normal; void Polygon :: PolyMirrorZ () Matrix m = MirrorZ(); for ( int i = 0; i < PointNumber; i++ ) Point[i] = m * Point[i]; Center = m * Center; Normal = m * Normal; void Polygon :: Draw ( const Vector& PrCenter ) int VisPoint[MaxPoints * 2], k = 0; for ( int i = 0; i < PointNumber; i++ ) double Coeff = 1 / ( 1 - Point[i].z / PrCenter.z ); VisPoint[k++] = ( int ) Point[i].x * Coeff + 320; VisPoint[k++] = ( int ) -Point[i].y * Coeff + 175; setcolor ( Color ); setfillstyle ( 1, Color ); fil lpoly ( PointNumber, VisPoint ); // GrObject's methods GrObject :: GrObject ( Polygon * FacetArr, int FacetNum, const Vector& Crds ) if ( FacetNum <= MaxFacets ) FacetNumber = FacetNum; Facet = FacetArr; Coords = Crds; void GrObject :: Move ( const Vector& v ) for ( int i = 0; i < FacetNumber; i++ ) Facet[i].Move ( v ); Coords = Translate ( v ) * Coords; void GrObject :: Rotate ( double Alfa, double Beta, double Gamma ) for ( int i = 0; i < FacetNumber; i++ ) Facet[i].Rotate ( Alfa, Beta, Gamma ); Coords = RotateX ( Alfa ) * RotateY ( Beta ) * RotateZ ( Gamma ) * Coords; void GrObject :: ObjScale ( const Vector& v ) for ( int i = 0; i < FacetNumber; i++ ) Facet[i].PolyScale ( v ); Coords = Scale ( v ) * Coords; void GrObject :: ObjMirrorX () Matrix m = MirrorX(); for ( int i = 0; i < FacetNumber; i++ ) Facet[i].PolyMirrorX (); Coords = m * Coords; void GrObject :: ObjMirrorY () Matrix m = MirrorY(); for ( int i = 0; i < FacetNumber; i++ ) Facet[i].PolyMirrorY (); Coords = m * Coords; void GrObject :: ObjMirrorZ () Matrix m = MirrorZ(); for ( int i = 0; i < FacetNumber; i++ ) Facet[i].PolyMirrorZ (); Coords = m * Coords; // Space's methods Space :: Space ( GrObject * Obj, int ObjectNum ) if ( ObjectNum <= MaxObjects ) ObjectNumber = ObjectNum; for ( int i = 0; i < ObjectNumber; i++ ) Object[i] = &Obj[i]; ; void Space :: Add ( GrObject * Obj ) if ( ObjectNumber < MaxObjects ) Object [ObjectNumber++] = Obj; void Space :: Draw ( const Vector& PrCenter ) // Other functions int IsVisible ( const Polygon& Poly, const Vector& PrCenter ) return ( Poly.Normal & ( PrCenter - Poly.Point[0] )) < 0 || Poly.TwoSides; void DrawBSPTree ( BSPNode * Tree, const Vector& PrCntr ) if (( Tree -> Poly -> Normal & PrCntr ) > Tree -> d ) if ( Tree -> Right != NULL ) DrawBSPTree ( Tree -> Right, PrCntr ); Tree -> Poly -> Draw ( PrCntr ); if ( Tree -> Left != NULL ) DrawBSP Tree ( Tree -> Left, PrCntr ); else if ( Tree -> Left != NULL ) DrawBSPTree ( Tree -> Left, PrCntr ); Tree -> Poly -> Draw ( PrCntr ); if ( Tree -> Right != NULL ) DrawBSPTree ( Tree -> Right, PrCntr ); Далее представлена демонстрационная пр ограмма , которая выполняет все вышеперечи сленные операции с тетраэдром. // Файл 3dgame.cpp #include #include #include #include #include #include #include "3dworks.h" void DrawObject ( GrObject* Ob j, const Vector& v ) for ( int i = 0; i < Obj->FacetNumber; i++ ) if ( IsVisible ( Obj->Facet[i], v )) Obj->Facet[i].Draw ( v ); main () Vector Poly1[3], Poly2[3], Poly3[3], Poly4[3]; Polygon O[4]; Vector A ( -50, 0, 0 ), B ( 0, 0, 50 ), C ( 50, 0, 0 ), D ( 0, 100, 0 ), PrCenter ( 0, 0, 1000 ); Poly1[0] = A; Poly2[0] = B; Poly1[1] = D; Poly2[1] = D; Poly1[2] = B; Poly2[2] = C; Poly3[0] = C; Poly4[0] = C; Poly3[1] = A; Poly4[1] = D; Poly3[2] = B; Poly4[2] = A; Polygon * P1 = new Polygon ( Poly1, 3, 11, OneSd ); Polygon * P2 = new Polygon ( Poly2, 3, 12, OneSd ); Polygon * P3 = new Polygon ( Poly3, 3, 13, OneSd ); Polygon * P4 = new Polygon ( Poly4, 3, 14, OneSd ); O[0] = *P1; O[1] = *P2; O[2] = *P3; O[3] = *P4; delete P1; delete P2; delete P3; delete P4; GrObject * Obj = new GrObject ( O, 4, Vector ( 0 ) ); double fi = 0.1, psi = 0.1, step = 0.1; int ch = 0, Page = 3; int driver = DETECT, mode, res; initgraph ( &driver, &mode, "" ); if ( ( res = graphresult () ) != grOk ) printf ( "\nGraphics error: %s\n", grapherrormsg ( res ) ); exit ( 1 ); setgraphmode ( 1 ); DrawObject ( Obj, PrCenter ); do setactivepage ( Page % 2 ); clearviewport (); if ( kbhit ()) switch ( ch = getch() ) case '+': Obj->ObjScale ((1.1,1.1,1.1)); break; case '-': Obj->ObjScale ((0.9,0.9,0.9)); break; case 'x': Obj->ObjMirrorX (); break; case 'y': Obj->ObjMirrorY (); break; case 'z': Obj->ObjMirrorZ (); break; ; if ( ch == 0 ) switch ( ch = getch () ) case 72 : fi -= step; break; case 80 : fi += step; break; case 75 : psi += step; break; case 77 : psi -= step; break; ; ; ; Obj->Rotate ( fi, psi, 0 ); DrawObject ( Obj, PrCenter ); setvisualpage ( Page++ % 2 ); if ( fi == 0 && psi == 0 ) while ( !kbhit ()); while ( ch != 27 ); delete Obj; closegraph ();
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
Смотрю порнуху, чтобы убедиться, что секс не изменился, пока я им не занимаюсь.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, реферат по программированию "Трехмерная графика. Теория", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru