Лабораторная работа №8 icon

Лабораторная работа №8



НазваниеЛабораторная работа №8
Дата конвертации07.09.2012
Размер31.77 Kb.
ТипЛабораторная работа
1. /Comp_gr/LAB_1/LAB1_CH.DOC
2. /Comp_gr/LAB_2/PROG2K.DOC
3. /Comp_gr/LAB_2/ПСЕВДО.DOC
4. /Comp_gr/LAB_2/Семантика.doc
5. /Comp_gr/LAB_2/титул.doc
6. /Comp_gr/LAB_3/LAB3_СН.DOC
7. /Comp_gr/LAB_4/LAB4.DOC
8. /Comp_gr/LAB_4/TITUL.DOC
9. /Comp_gr/LAB_4/Результат1.doc
10. /Comp_gr/LAB_4/Результат2.doc
11. /Comp_gr/LAB_5/LAB5_CH.DOC
12. /Comp_gr/LAB_8/LABA8.DOC
Лабораторная работа №1 по предмету Компьютерная графика
Program Lab2; { Программа построения растра 32x32 }
{активация гр режима}
Семантика базы переменных
Технический университет Лабораторная работа №2 по компьютерной графике тема: Построение растра
Лабораторная работа №3 по компьютерной графике
Постановка задачи
Лабораторная работа №4 по компьютерной графике
Шаг | Координаты (X,Y) | Расчетн.(X,Y)
Шаг | Координаты (X,Y) | Расч(X,Y)
Лабораторная работа №5 по компьютерной графике
Лабораторная работа №8


Московский институт радиотехники электроники и автоматики

(технический университет)


Лабораторная работа № 8

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




ТЕМА: Реализация алгоритма поворота трехмерной фигуры




Работу выполнил студент

группы ----------------

Работу приняла Криницкая Е.В.


Москва

2001

Постановка задачи



Построить матрицу поворота вокруг оси Z и реализовать алгоритм поворота для трехмерной фигуры – четырехугольной пирамиды.

Алгоритм





  1. Строим матрицу поворота , где α – угол поворота (против часовой стрелки).

  2. Стираем фигуру с экрана.


  3. Поворачиваем каждую вершину фигуры:

Вычисляем B = MA, где A = , B = , причем X, Y, Z – старые,
а X1, Y1, Z1 – новые координаты вершины.

  1. Проецируем фигуру на плоскость YOZ и преобразуем координаты вершин в координатную систему экрана:


Xэ = 320 + Round(Y * P),

Yэ = 240 – Round(Z * P),

где P = , a ViewDist – расстояние от плоскости YOZ до точки наблюдения.


  1. Рисуем фигуру в новом положении.

  2. Повторяем пп. 2-5 нужное количество раз.



uses

Crt, Graph;


const

VertexCount = 5;

ViewDist = 500;


type

TTurnMatrix = array[0..2, 0..2] of Double;

TVector = array[0..2] of Double;


procedure BuildMatrix(Angle: Double; var Matrix: TTurnMatrix);

var

SinA, CosA: Double;

begin

SinA := Sin(Angle);

CosA := Cos(Angle);

Matrix[0, 0] := CosA;

Matrix[0, 1] := -SinA;

Matrix[0, 2] := 0;

Matrix[1, 0] := SinA;

Matrix[1, 1] := CosA;

Matrix[1, 2] := 0;

Matrix[2, 0] := 0;

Matrix[2, 1] := 0;

Matrix[2, 2] := 1;

end;


procedure TurnPoint(var X, Y, Z: Double; Matrix: TTurnMatrix);

var

I, J: Byte;

V1, V2: TVector;

begin

V1[0] := X;

V1[1] := Y;

V1[2] := Z;

for I := 0 to 2 do

begin

V2[I] := 0;

for J := 0 to 2 do

V2[I] := V2[I] + Matrix[I, J] * V1[J];

end;

X := V2[0];

Y := V2[1];

Z := V2[2];

end;


type

TFigure = record

Vertexes: array[0..VertexCount - 1] of record

X, Y, Z: Double;

end;

PrVertexes: array[0..VertexCount - 1] of record

prX, prY: Integer;

end;

Ribs: array[0..VertexCount - 1, 0..VertexCount - 1] of Boolean;

end;


procedure TurnFigure(var F: TFigure; Matrix: TTurnMatrix);

var

I: Integer;

begin

for I := 0 to VertexCount - 1 do

with F.Vertexes[I] do

TurnPoint(X, Y, Z, Matrix);

end;


procedure Project(X, Y, Z: Double; var prX, prY: Integer);

var

P: Double;

begin

P := ViewDist / (ViewDist - X);

prX := 320 + Round(Y * P);

prY := 240 - Round(Z * P);

end;


procedure ProjectFigure(var F: TFigure);

var

I: Integer;

begin

for I := 0 to VertexCount - 1 do

with F.Vertexes[I], F.PrVertexes[I] do

Project(X, Y, Z, prX, prY);

end;


procedure DrawProjection(F: TFigure);

var

I, J: Integer;

begin

with F do

for I := 0 to VertexCount - 2 do

for J := I + 1 to VertexCount - 1 do

if Ribs[I, J] then

Line(PrVertexes[I].prX, PrVertexes[I].prY,

PrVertexes[J].prX, PrVertexes[J].prY);

end;


procedure DrawFigure(F: TFigure);

begin

ProjectFigure(F);

DrawProjection(F);

end;


var

Figure: TFigure;


procedure InitFigure;

begin

with Figure do

begin

Vertexes[0].X := 0;

Vertexes[0].Y := 0;

Vertexes[0].Z := 130;

Vertexes[1].X := 120;

Vertexes[1].Y := 120;

Vertexes[1].Z := -120;

Vertexes[2].X := -120;

Vertexes[2].Y := 120;

Vertexes[2].Z := -120;

Vertexes[3].X := -120;

Vertexes[3].Y := -120;

Vertexes[3].Z := -120;

Vertexes[4].X := 120;

Vertexes[4].Y := -120;

Vertexes[4].Z := -120;

Ribs[0, 1] := True;

Ribs[0, 2] := True;

Ribs[0, 3] := True;

Ribs[0, 4] := True;

Ribs[1, 2] := True;

Ribs[1, 4] := True;

Ribs[2, 3] := True;

Ribs[3, 4] := True;

end;

end;


var

GrD, GrM: Integer;

Matrix: TTurnMatrix;


begin

InitFigure;

BuildMatrix(Pi / 180, Matrix);

DetectGraph(GrD, GrM);

InitGraph(GrD, GrM, '');

SetColor(White);

DrawFigure(Figure);

ReadLn;

repeat

ClearDevice;

TurnFigure(Figure, Matrix);

SetColor(White);

DrawFigure(Figure);

Delay(500);

until KeyPressed;

CloseGraph;

end.





Похожие:

Лабораторная работа №8 iconДокументы
1. /OOP/Лабораторная работа ь00-Введение.doc
2. /OOP/Лабораторная...

Лабораторная работа №8 iconЛабораторная работа: создание мини-презентации «Памятники Кремля»
Лабораторная работа проводится в компьютерном классе, с подключением к сети Internet
Лабораторная работа №8 iconДокументы
1. /Lab1/Лабораторная работа 1.doc
2. /Lab2/Лабораторная...

Лабораторная работа №8 iconИ я забуду Покажи мне и я запомню, Дай мне действовать самому и я научусь. Китайская мудрость Тема: Лабораторная работа
Тема: «Лабораторная работа «Измерение работы и мощности тока в электрической лампочке»
Лабораторная работа №8 iconДокументы
1. /Nash/lab1/Лабораторная работа ь1.doc
2. /Nash/lab10/Лабораторная...

Лабораторная работа №8 iconЛабораторная работа №2 «Система безопасности Windows xp»
Лабораторная работа №2 «Система безопасности Windows xp» Цель работы: Изучить систему безопасности Windows xp
Лабораторная работа №8 iconЛабораторная работа «Работа в Windows c помощью основного меню. Использование технологии ole»
Запишите размер папки, выраженный в Мб (мегабайтах) в текстовый редактор блокнот
Лабораторная работа №8 iconЛабораторная работа «Работа с текстовыми фрагментами без помощи мыши»
Скопируйте последнее слово получившегося текста и вставьте его в начало текста один раз
Лабораторная работа №8 iconДокументы
1. /Базовые задачи на обработку массива.doc
2. /ЗадачиНаЛиниВетвление.doc
Лабораторная работа №8 iconДокументы
1. /laba/Лабораторная работа ь1.doc
2. /laba/Лабораторная...

Лабораторная работа №8 iconДокументы
1. /механизация/~$б работа ь4.doc
2. /механизация/~$бораторная...

Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©podelise.ru 2000-2014
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы

Разработка сайта — Веб студия Адаманов