Компьютерная графика

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    533,07 Кб
  • Опубликовано:
    2012-10-10
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Компьютерная графика


Контрольная работа

по дисциплине Компьютерная графика

1. Деловая графика

Чтобы создать правильное, наглядное и красивое отображение статистических данных, можно воспользоваться программой MS Excel.создает диаграммы профессионально и очень быстро на основе данных листа. Хотя можно планировать и строить диаграммы в Excel «вручную», но мастер диаграмм большинстве случаев очень хорошо справляется с этой работой. В таблице описаны все типы диаграмм, которые создает Excel.

Таблица. Диаграммы Excel

Тип диаграммы

Описание

Гистограмма (Column)

Показывает изменение данных за определенный период времени и иллюстрирует соотношение отдельных значений данных.

Линейчатая (Bar)

Отражает соотношение отдельных компонентов.

График (Line)

Отражает тенденции изменения данных за равные промежутки времени.

Круговая (Pie)

Иллюстрирует относительные значения элементов из одного ряда.

Точечная (XY (scatter))

Отображает взаимосвязь между числовыми значениями в нескольких рядах.

С областями (Area)

Подчеркивает величину изменения в течение определенного периода времени.

Кольцевая (Doughnut)

Показывает вклад каждого элемента в общую сумму.

Лепестковая (Radar)

Каждая категория имеет собственную ось координат, исходящую из начала координат (позволяет сравнить общие значения из нескольких наборов данных, что удобно использовать, например, при статистическом исследовании спроса)..

Поверхность (Surface)

Используется для поиска наилучшего сочетания двух наборов данных.

Пузырьковая (Bubble)

Отображает взаимосвязь между числовыми значениями в нескольких рядах (по двум переменным), но также (с помощью кругов, или пузырьков, различных размеров) указывает значение третьей переменной.

Биржевая (Stock)

Используется для демонстрации максимальных и минимальных цен на акции, а также цен закрытия.

Цилиндрическая, коническая, пирамидальная (Cone, Cylinder. Pyramid)

Иллюстрирует тенденции изменения и соотношение значении данных с помощью объемных изображений конуса, цилиндра или пирамиды.

 

Ряд данных - это один столбец, одна строка или набор значений в ках, сгруппированных вместе, например, это может быть выручка делю, за месяц, за год или выручка определенного продавца в магазине.

Ось - это граница диаграммы, показывающая тип ряда, например, время или денежные суммы.

Легенда - это описание рядов данных и осей диаграммы.

Таблица данных - это уменьшенное изображение вашего листа с выделенными для построения диаграммы данными, которое располагается под диаграммой.

Маркеры изменения размера - это восемь черных квадратиков, расположенных вокруг определенных объектов, (например, диаграмм) перетаскивая которые, вы сможете изменять их размеры.

Таблица 1. Статистические данные продаж автомобилей.

Аукционная статистика продаж автомобилей марки Toyota Cedan

 

 

Toyota Allion

 

Кузов

Объем

Шт.

Цена прим. <#"587463.files/image001.gif">

Рис.1. Статистика продаж автомобилей

Вывод:

Средствами программы MS Excel создана объемная круговая диаграмма, иллюстрирующая статистические данные.

. Трехмерные преобразования

Постановка задачи: составить программу, реализующую трехмерное преобразование с фигурой октаэдр в контурном виде, без удаления невидимых линий. Фигура должна вращаться вокруг произвольной оси. Вращение управляется с помощью девяти клавишь (1…9) на цифровой клавиатуре.

Окта́эдр (греч. <#"587463.files/image002.gif">

Рис.2. Октаэдр.

Если длина ребра октаэдра равна а, то площадь его полной поверхности (S) и объём октаэдра (V) вычисляются по формулам:


Радиус сферы, описанной вокруг октаэдра, равен:

,

радиус вписанной в октаэдр сферы может быть вычислен по формуле:


Правильный октаэдр имеет симметрию Oh, совпадающую с симметрией куба <#"587463.files/image007.gif">, трехмерные преобразования могут быть представлены матрицами размером . Тогда трехмерная точка записывается в однородных координатах как , где . Для получения декартовых координат надо первые три однородные координаты разделить на . Два однородных вектора описывают одну декартову точку в трехмерном пространстве, если , где и - векторы, записанные в однородных координатах.

Матрицы преобразований будем записывать в правосторонней системе координат. При этом положительный поворот определяется следующим образом. Если смотреть из положительной части оси вращения (например, оси ) в направлении начала координат, то поворот на против часовой стрелки будет переводить одну положительную полуось в другую (ось в , в соответствии с правилом циклической перестановки).

Заметим, что на практике удобнее применять левостороннюю систему координат, так как в этом случае удобнее интерпретировать тот факт, что точки с большими значениями  находятся дальше от наблюдателя.

Запишем теперь матрицу трехмерного переноса. Аналогично двумерному случаю.

, при этом

.

Операция масштабирования:

 


Перейдем к операции поворота, с ней в трехмерном случае придется разбираться чуть побольше чем в двумерном. Так как при двумерном повороте в плоскости координаты остаются неизменными, то поворот вокруг оси записывается так:

 

.

Матрица поворота вокруг оси имеет вид:

 

,

и вокруг оси :

 

Обратите внимание на смену положения синуса угла с отрицательным знаком в матрице поворота вокруг оси . Правильность этих матриц легко проверить поворотом одного из ортов на , при этом он должен перейти в следующий по порядку орт на соответствующей координатной оси.

Обратные преобразования будут выражаться обратными матрицами. Для операции переноса надо лишь заменить знаки компонент вектора переноса на противоположные:

 

;

для операции масштабирования - на обратные значения:

 

для поворота - выбором отрицательного угла поворота:

 

.

Результатом нескольких последовательных поворотов будет матрица

 

.

Здесь верхняя матрица размером называется ортогональной. Важным ее свойством является то, что обратная к ней матрица является транспонированной: . Это полезно тем, что при вычислениях достаточно поменять индексы местами и обратное преобразование получается автоматически.

После перемножения любого числа матриц вида и результирующая матрица всегда будет иметь вид:

.

Здесь верхняя часть размером определяет суммарный поворот и масштабирование, а три коэффициента последней строки - суммарный перенос.

Используя вышеизложенный математический аппарат, можно составить следующую программу на языке программирования Turbo Pascal.

Листинг программы:

Uses Graph, Crt; {подключение графического и текстового модуля}

Const N=8; {постоянные 8 граней, 12 ребер}

M=12;

Type Coord = record {описание типов, используемых программой}

X,Y,Z : Real;;= record,E,C,d : Word;;

Var {Рездел описания переменных}

grDriver : Integer; {Переменные для работы в графическом режиме}

grMode : Integer;: Array [1..N] of Coord; : Array [1..M] of Rebro;: Char;: Byte;,C : Coord;, Uy, Uz : Real;Tr3d(P,T:Coord; Var R:Coord); {Процедура расчет значений 3-х векторов }Matrix = Array [1..4,1..4] Of Real;I,J : Byte;: Matrix;I := 1 To 4 Do For J := 1 To 4 Do If I = J Then O[I,J] := 1O[I,J] := 0;[1,4] := T.X;[2,4] := T.Y;[3,4] := T.Z;.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3] * P.Z + O[1,4];.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3] * P.Z + O[2,4];.Z := O[3,1] * P.X + O[3,2] * P.Y + O[3,3] * P.Z + O[3,4];;Sr3d(P,S:Coord; Var R:Coord); {расчет изменения масштаба }Matrix = Array [1..4,1..4] Of Real;I,J : Byte;: Matrix;I := 1 To 4 Do For J := 1 To 4 Do If I = J Then O[I,J] := 1O[I,J] := 0;[1,1] := S.X;[2,2] := S.Y;[3,3] := S.Z;.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3] * P.Z + O[1,4];.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3] * P.Z + O[2,4];.Z := O[3,1] * P.X + O[3,2] * P.Y + O[3,3] * P.Z + O[3,4];;UX3d(P:Coord; Teta:Real; Var R:Coord); {расчет вращения вокруг оси x}Matrix = Array [1..4,1..4] Of Real;I,J : Byte;: Matrix;I := 1 To 4 Do For J := 1 To 4 Do If I = J Then O[I,J] := 1O[I,J] := 0;[2,2] := COS(Teta);[2,3] := -SIN(Teta);[3,2] := SIN(Teta);[3,3] := COS(Teta);.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3] * P.Z + O[1,4];.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3] * P.Z + O[2,4];.Z := O[3,1] * P.X + O[3,2] * P.Y + O[3,3] * P.Z + O[3,4];;UY3d(P:Coord; Teta:Real; Var R:Coord); {расчет вращения вокруг оси y}Matrix = Array [1..4,1..4] Of Real;I,J : Byte;: Matrix;I := 1 To 4 Do For J := 1 To 4 Do If I = J Then O[I,J] := 1O[I,J] := 0;[1,1] := COS(Teta);[1,3] := -SIN(Teta);[3,1] := SIN(Teta);[3,3] := COS(Teta);.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3] * P.Z + O[1,4];.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3] * P.Z + O[2,4];.Z := O[3,1] * P.X + O[3,2] * P.Y + O[3,3] * P.Z + O[3,4];;UZ3d(P:Coord; Teta:Real; Var R:Coord); {расчет вращения вокруг оси z}Matrix = Array [1..4,1..4] Of Real;I,J : Byte;: Matrix;I := 1 To 4 Do For J := 1 To 4 Do If I = J Then O[I,J] := 1O[I,J] := 0;[1,1] := COS(Teta);[1,2] := -SIN(Teta);[2,1] := SIN(Teta);[2,2] := COS(Teta);.X := O[1,1] * P.X + O[1,2] * P.Y + O[1,3] * P.Z + O[1,4];.Y := O[2,1] * P.X + O[2,2] * P.Y + O[2,3] * P.Z + O[2,4];.Z := O[3,1] * P.X + O[3,2] * P.Y + O[3,3] * P.Z + O[3,4];;

Procedure Fig; {расчет начальных координат для октаэдра}

Begin[ 1].X := 10; A[ 1].Y := 10; A[ 1].Z := 10; {координаты 6 вершин}[ 2].X :=10; A[ 2].Y := 10; A[ 2].Z :=-10;[ 3].X := -10; A[ 3].Y := 10; A[ 3].Z := -10;[ 4].X := -10; A[ 4].Y := 10; A[ 4].Z := 10;[ 5].X := 0; A[ 5].Y := -10;A[ 5].Z := 0;[ 6].X := 0; A[ 6].Y := 30; A[ 6].Z := 0;[ 1].B := 1; B[ 1].E := 2; B[ 1].C := 4;{координаты соединяемых вершин, цвет ребер}[ 2].B := 2; B[ 2].E := 3; B[ 2].C := 4;[ 3].B := 3; B[ 3].E := 4; B[ 3].C := 4;[ 4].B := 5; B[ 4].E := 1; B[ 4].C := 14;[ 5].B := 5; B[ 5].E := 2; B[ 5].C := 14;[ 6].B := 5; B[ 6].E := 3; B[ 6].C := 14;[ 7].B := 5; B[ 7].E := 4; B[ 7].C := 14;[ 8].B := 6; B[ 8].E := 1; B[ 8].C := 12;[ 9].B := 6; B[ 9].E := 2; b[ 9].C := 12;[10].B := 6; B[10].E := 3; b[10].C := 12;[11].B := 6; B[11].E := 4; b[11].C := 12;[12].B := 4; B[12].E := 1; b[12].C := 4;

End;

Procedure Draw3D; {ввод значений для вывода на экран фигуры}

Var I : Byte;, YB, XE, YE : Real;I := 1 To M Do Begin(B[I].C);:= A[B[I].B].X;:= A[B[I].B].Y;:= A[B[I].E].X;:= A[B[I].E].Y;( Trunc(XB), Trunc(YB), Trunc(XE), Trunc(YE) );;;Hide3D; {стирание фигуры}I : Byte;, YB, XE, YE : Real;(Black);I := 1 To M Do Begin:= A[B[I].B].X;:= A[B[I].B].Y;:= A[B[I].E].X;:= A[B[I].E].Y;( Trunc(XB), Trunc(YB), Trunc(XE), Trunc(YE) );;;; {очистка экрана, модуль crt }('1-2 ‚вращение по оси OZ'); {вывод на экран меню - пояснение к управляющим кнопкам}

WriteLn('3-4 ‚ вращение по оси OY');

WriteLn('5-6 ‚ вращение по оси OX');

WriteLn('7-9 приблизить объект - отдалить объект);

WriteLn('esc для выхода из программы);

ReadLn; {ожидание нажатия клавиши enter}

Fig; {ввод процедуры рисования фигуры }

C.X := 5; C.Y := 5; C.Z := 5; { указание координат вывода на экран}

For I := 1 To N Do Sr3d(A[I], C, A[I]);.X := 200; L.Y := 200; L.Z := 200;I := 1 To N Do Tr3d(A[I], L, A[I]); := Detect;(grDriver,grMode,'c:\tp\bgi\'); {инициализация графического режима}3D; { вывод на экран фигуры}

Key := ' ';

While Key <> #27 Do Begin {если нажата клавиша enter присвоить значения для клавиши (от 1 до 8)}

Key := ReadKey;Key = '1' Then BeginD;.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);:= Pi/120; For I := 1 To N Do Uz3d(A[i],Uz,A[i]);.X := -L.X; L.Y := -L.Y; L.Z := -L.Z; I := 1 To N Do Tr3d(A[I], L, A[I]); {смещение фигуры относительно оси z по часовой стрелке}

Draw3D;;Key = '2' Then BeginD;.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);:= -Pi/120; For I := 1 To N Do Uz3d(A[i],Uz,A[i]);.X := -L.X; L.Y := -L.Y; L.Z := -L.Z; I := 1 To N Do Tr3d(A[I], L, A[I]); {смещение фигуры относительно оси z против часовой стрелки}

Draw3D;;Key = '3' Then BeginD;.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);:= Pi/120; For I := 1 To N Do Uy3d(A[i],Uy,A[i]);.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]); {смещение фигуры относительно оси y вправо}D; ;Key = '4' Then BeginD;.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);:= -Pi/120; For I := 1 To N Do Uy3d(A[i],Uy,A[i]);.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]); {смещение фигуры относительно оси y влево}D;;Key = '5' Then BeginD;.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);:= Pi/120; For I := 1 To N Do Ux3d(A[i],Ux,A[i]);.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]); {смещение фигуры относительно оси х вверх}D;;Key = '6' Then BeginD;.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);:= -Pi/120; For I := 1 To N Do Ux3d(A[i],Ux,A[i]);.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]); {смещение фигуры относительно оси х вниз}D;;Key = '7' Then BeginD;.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);.X := 1.1; C.Y := 1.1; C.Z := 1.1;I := 1 To N Do Sr3d(A[I], C, A[I]);.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]); {масштабирование фигуры - приблизить}D; ;Key = '9' Then BeginD;.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]);.X := 0.9; C.Y := 0.9; C.Z := 0.9;I := 1 To N Do Sr3d(A[I], C, A[I]);.X := -L.X; L.Y := -L.Y; L.Z := -L.Z;I := 1 To N Do Tr3d(A[I], L, A[I]); {масштабирование фигуры - удалить}D;;;D;; {закрыть графический режим}

End.

Вывод:

При помощи языка программирования Turbo Pascal создана программа, реализующая трехмерные преобразования с октаэдром. Программа составлена с использованием процедур для отображения и вращения вокруг осей x, y, z. Управление вращением осуществляется с помощью клавиш <1>..<9> на клавиатуре.

3. Проекции

Постановка задачи: Написать программу для изображения гексаэдра, вращающегося вокруг оси Y. Ось не должна совпадать с собственной вертикальной осью фигуры. При выполнении задания необходимо реализовать алгоритм удаления невидимых линий. Все грани рисовать закрашенными различными цветами.

Проекция Кабине (рис. 3.) имеет направление проецирования, которое составляет с проекционной плоскостью угол  = arctg(½) (≈26,5°). При этом отрезки, перпендикулярные проекционной плоскости, после проецирования составляют ½ их действительной длины. Проекции Кабине являются более реалистическими, чем проекции Кавалье, так как укорачивание с коэффициентом ½ больше согласуется с нашим визуальным опытом.

Рис. 3. Проекция Кабине

Задача удаления невидимых линий и поверхностей является одной из наиболее сложных задач в компьютерной графике. Для решения данной задачи были разработаны специальные алгоритмы, целью которых является удаление тех линий ребер, поверхностей, граней или объемов, которые невидны наблюдателю. Идея алгоритмов удаления невидимых линий и поверхностей заключается в следующем: чем дальше расположен объект от точки наблюдения, тем больше вероятность, что он будет полностью или частично заслонен другим, более близким к наблюдателю, объектом. После определения расстояний или приоритетов по глубине проводится сортировка по горизонтали и по вертикали, для выяснения, будет ли рассматриваемый объект действительно заслонен объектом, расположенным ближе к точке наблюдения.

Выделяют три класса таких алгоритмов:

. Алгоритмы, работающие в пространстве объекта. Для определения видимости данной поверхности сравнивается ее взаимное расположение с остальными поверхностями объекта в трехмерной сцене.

• Алгоритм Робертса.

. Алгоритмы, работающие в пространстве изображения (экрана). Они основаны на нахождении точки ближайшей поверхности, которую пересекает луч зрения, проходящий через заданную точку на растре.

• Алгоритм плавающего горизонта;

• Алгоритм Коэна − Сазерленда;

• Модифицированный вариант алгоритма Коэна − Сазарленда;

• Алгоритм с использованием z-буфера;

• Алгоритм Варнока;

• Алгоритм Вейлера − Азертона.

. Алгоритмы, формирующие список приоритетов, работают попеременно в обеих системах координат (объекта и изображения).

• Алгоритм Ньюэла − Ньюэла − Санча (алгоритм удаления невидимых граней методом сортировки по глубине;)

Рассмотрим более подробно некоторые алгоритмы удаления невидимых линий и поверхностей.

Алгоритм Робертса

Алгоритм Робертса удаляет из каждого тела те ребра или грани, которые скрываются самим телом. Затем каждое из видимых ребер каждого тела сравнивается с каждым из оставшихся тел для определения того, какая его часть или части, если таковые есть, скрываются этими телами. При этом вычислительная трудоемкость алгоритма Робертса растет теоретически, как квадрат числа объектов. При этом математические методы, используемые в этом алгоритме, просты, мощны и точны.

Алгоритм плавающего горизонта

Алгоритм плавающего горизонта чаше всего используется для удаления невидимых линий трехмерного представления функций, описывающих поверхность в виде F(x, у, z) = 0.

Идея метода заключается в сведении трехмерной задачи к двумерной путем пересечения исходной поверхности последовательностью параллельных секущих плоскостей, имеющих постоянные значения координаты z. трехмерный октаэдр гексаэдр программа

Алгоритм сначала упорядочивает плоскости z = const по возрастанию расстояния до них от точки наблюдения. Затем для каждой плоскости, начиная с ближайшей к точке наблюдения, строится кривая, лежащая на ней, т.е. для каждого значения координаты х в пространстве изображения определяется соответствующее значение y.

Если на текущей плоскости при некотором заданном значении x соответствующее значение у на кривой больше значения y для всех предыдущих кривых при этом значении x, то текущая кривая видима в этой точке; в противном случае она невидима.

Используя вышеизложенный математический аппарат, можно составить следующую программу на языке программирования Turbo Pascal.

Листинг программы:

ROGRAM HEXAEDR;Crt, Graph;

VAR Gd, Gm: Integer; {Переменные для работы в графическом режиме}: array[1..8, 1..3] of real; {Массив с координатами вершин}: array[1..8, 1..2] of integer; {Массив с координатами вершин в проекции}

grani: array[1..6, 1..4] of integer; {Массив граней гексаэдра}

i, j: integer; {Цикловые переменные}: char; {Значение нажатой клавиши}Projectiya; {Расчет координат проекции}UgolX=26.5*Pi/180; {Угол вращения вокруг оси X}=26.5*Pi/180; {Угол вращения вокруг оси Y}

BEGINi:=1 To 8 Do Begin[i,1]:=round(hex[i,1]*cos(UgolY)+hex[i,3]*sin(UgolY))+320;[i,2]:=290-round(hex[i,1]*sin(UgolY)*sin(UgolX)+hex[i,2]*cos(UgolX)-hex[i,3]*cos(UgolY)*sin(UgolX));;;VidimayaGran(i:integer): boolean; {Определение видимости i-й грани}V1,V2,N: array[1..3] of real;

scalar: real;

{Расчет значений 2-х векторов, лежащих в плоскости грани}

For j:=1 To 3 Do Begin[j]:=hex[grani[i,2],j]-hex[grani[i,1],j];[j]:=hex[grani[i,3],j]-hex[grani[i,1],j];

End;

{Вычисление вектора нормали грани}

N[1]:=V1[2]*V2[3]-V2[2]*V1[3];[2]:=V1[3]*V2[1]-V2[3]*V1[1];

N[3]:=V1[1]*V2[2]-V2[1]*V1[2];

{Определение видимости грани}

scalar:=N[1]-N[2]-N[3];scalar>0 Then:=true:=false;;Draw; {Вывод на экран}gran: array[1..4] of PointType;;i:=1 To 6 Do Begin

If VidimayaGran(i) Then Begin {Если грань видима, то выводим ее на экран}

For j:=1 To 4 Do Begin[j].x:=hex2[grani[i,j],1];[j].y:=hex2[grani[i,j],2];

End;(1,i+8); {Устанавливаем цвет и стиль закраски}

FillPoly(4,gran);;;;VrachOY(Ugol: real); {Поворот вокруг оси OY}x,z: real;i:=1 To 8 Do Begin:=hex[i,1];:=hex[i,3];[i,1]:=x*cos(Ugol)+z*sin(Ugol);[i,3]:=-x*sin(Ugol)+z*cos(Ugol);;;

{Описываем гексаэдр}[1,1]:=30; hex[1,2]:=0; hex[1,3]:=0;[2,1]:=30; hex[2,2]:=150; hex[2,3]:=0;[3,1]:=180; hex[3,2]:=150; hex[3,3]:=0;[4,1]:=180; hex[4,2]:=0; hex[4,3]:=0;[5,1]:=30; hex[5,2]:=0; hex[5,3]:=150;[6,1]:=30; hex[6,2]:=150; hex[6,3]:=150;[7,1]:=180; hex[7,2]:=150; hex[7,3]:=150;[8,1]:=180; hex[8,2]:=0; hex[8,3]:=150;

{и грани}[1,1]:=1; grani[1,2]:=2; grani[1,3]:=3; grani[1,4]:=4;[2,1]:=5; grani[2,2]:=6; grani[2,3]:=2; grani[2,4]:=1;[3,1]:=2; grani[3,2]:=6; grani[3,3]:=7; grani[3,4]:=3;[4,1]:=4; grani[4,2]:=3; grani[4,3]:=7; grani[4,4]:=8;[5,1]:=1; grani[5,2]:=4; grani[5,3]:=8; grani[5,4]:=5;[6,1]:=5; grani[6,2]:=8; grani[6,3]:=7; grani[6,4]:=6;:= Detect;

InitGraph(Gd, Gm, ''); {Инициализация графического режима}

If GraphResult <> grOk Then(1);

SetBkColor(Blue); {Устанавливаем цвет фона}; {Очищаем экран}; {Выводим}ch<>#27 Do Begin {Пока не нажата клавиша "Esc", вращаем}keypressed Then:=readkey; {Считываем значение нажатой клавиши}(pi/40); {Делаем поворот вокруг оси OY}; {Очищаем экран}; {Выводим}

OuttextXY(10,465,'Press <Esc> to Exit');

Delay(8000);;; {Завершение работы в графическом режиме}.

Вывод:

При помощи языка программирования Turbo Pascal создана программа, реализующая вращение гексаэдра вокруг оси Y. Программа составлена с использованием процедур для отображения и вращения фигуры, а также удаления невидимых линий. Все грани закрашены различными цветами.

Заключение

В этой контрольной работе подробно рассмотрены методы перемещения объектов внутри макета, применяя к ним различные преобразования (называемые также <трансформациями>). Кроме того, с помощью определенных преобразований можно изменять положение, ориентацию и размеры объектов. Выше рассказывается, как несколько преобразований комбинируются в одном, которое одновременно перемещает и ориентирует объект, а также изменяет его размеры. Суть методов заключается в том, что все эти преобразования производятся с помощью матриц. С помощью использования математического аппарата были решены задачи создания и преобразования компьютерной графики.

Похожие работы на - Компьютерная графика

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!