на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Програмування трьохмірної графіки та анімації засобами Turbo Pascal
p align="left">Розглянемо більш детально даний модуль:

Перш за все, в ньому оголошено глобальні зміні, які відповідатимуть за координати точки в просторі, на екрані:

type vector=array[1..3] of Real;

projection=array[1..2] of vector;

type Toch2d=record

x,y:integer;

end;

type Toch3d=record

x,y,z:real;

end;

var

abs_x_center, abs_y_center: Integer; DriverP: Pointer;

Даний модуль містить ряд функцій, а саме, функції Procedure open_graph та Procedure close_graph відповідають за ініціалізацію та вихід із графічного режиму.

Процедура Procedure out_text_XY(ss: String; x,y:integer; color: Word) відповідає за відображення текстового рядка заданим кольором за відповідними координатами.

Процедура Procedure put_picxel(d2:Toch2d; color: Word) за координатами точки у двохвимірному просторі за заданим кольором відображає її на екран.

Процедура Procedure norm_line(d2_0,d2_1:Toch2d; color:word) за координатами 2 точок у двохвимірному просторі за заданим кольором будує на екран лінію.

Дані процедури побудовані на основі стандартних функцій.

Відповідно до формул 1.33 та 1.34 вибору проекцій відображення побудовані матриці перетворення в ізометричній, диметричній та ортогональній проекції. Дані матриці необхідні для переходу від 3d до 2d координат:

Procedure computer_isometric_matrix(var P:projection);

Begin

P[1,1]:=-1.0/Sqrt(2.0);

P[1,2]:=-P[1,1];

P[1,3]:=0.0;

P[2,1]:=-1.0/Sqrt(6.0);

P[2,2]:=P[2,1];

P[2,3]:=-2.0*P[2,1];

End;

Procedure computer_dimetric_matrix(alpha: Real; var P: projection);

Var

t: Real;

Begin

alpha:=pi*alpha/180.0;

P[1,1]:=-1.0/Sqrt(2.0);

P[1,2]:=-P[1,1];

P[1,3]:=0.0;

t:=Sin(alpha)/cos(alpha);

P[2,1]:=t*P[1,1];

P[2,2]:=P[2,1];

P[2,3]:=Sqrt(1.0-Sqr(t));

End;

Procedure computer_oblique_matrix(alpha: Real; var P: projection);

Begin

alpha:=pi*alpha/180.0;

P[1,1]:=-Sin(alpha);

P[1,2]:=1.0;

P[1,3]:=0.0;

P[2,1]:=-Cos(alpha);

P[2,2]:=0.0;

P[2,3]:=1.0;

End;

Процедура повороту точки відносно початку координат побудована у відповідності до формул 1.12 - 1.22 і має вигляд:

Procedure povorot(var mas:Toch3d; kx,ky,kz:real);

var tx,ty,tz,y,x,z:real;

Begin

tx:=mas.x;

ty:=mas.y*cos(kx*pi/180)+mas.z*sin(kx*pi/180);

tz:=mas.y*(-sin(kx*pi/180))+mas.z*cos(kx*pi/180);

y:=ty;

x:=tx*cos(ky*pi/180)+tz*(-sin(ky*pi/180));

z:=tx*sin(ky*pi/180)+tz*cos(ky*pi/180);

mas.z:=z;

mas.x:=x*cos(kz*pi/180)+y*sin(kz*pi/180);

mas.y:=-x*sin(kz*pi/180)+y*cos(kz*pi/180);

End;

У відповідності до формули 1.25 побудована процедура руху точки:

Procedure rux(var mas:Toch3d; dx,dy,dz:real);

Begin

mas.x:=mas.x+dx;

mas.y:=mas.y+dy;

mas.z:=mas.z+dz;

End;

У відповідності до формули 1.27 побудована процедура масштабування:

Procedure mach(var mas:Toch3d; mx,my,mz:real);

Begin

mas.x:=mas.x*mx;

mas.y:=mas.y*my;

mas.z:=mas.z*mz;

End;

Для переходу з трьохмірої моделі до двомірної використовується процедура project(const P:projection; const d3:Toch3d; const c:Toch2d; var d2:Toch2d), що за заданими координатами 3d точки та вибраною матрицею проекції проводить перевід у двовимірні координати монітору:

Procedure project(const P:projection; const d3:Toch3d; const c:Toch2d; var d2:Toch2d);

Begin

d2.x:=c.x+Round(P[1,1]*d3.x+P[1,2]*d3.y+P[1,3]*d3.z);

d2.y:=c.y+Round(P[2,1]*d3.x+P[2,2]*d3.y+P[2,3]*d3.z);

End;

Даного модуля в принципі достатньо для реалізації побудови 3d об'єктів, анімації. Адже більшість операцій відбувається саме із вершинами об'єкта, а даний модуль саме їх і описує.

2.2 Відображення об'ємних фігур в різних проекціях

Для розуміння вигляду фігур у різних проекціях побудовано каркас тетраедра із виведенням його у диметричній, ізометричній та ортогональній проекціях.

Тетраедр задається чотирма своїми вершинами і почергово виводиться на екран.

Всі вершини зображення тетраедра з'єднуються лініями. Щоб вивести зображення тетраедра в заданій проекції, необхідно обрахувати значення екранних координат і провести відрізки прямих. Зображення тетраедра виводиться в ізометричній, косокутній і диметричній проекціях, причому спочатку виводиться статичне зображення, а вже потім воно перемальовується в циклі по куту проектування:

d3:array[1..4] of Toch3d;

c:Toch2d;

d2:array[1..4] of Toch2d;

xstep,ystep,theta: Real;

i,j,xold,yold,xnew,ynew: Integer;

p:projection;

abs_x_center:= 0;

abs_y_center:= 0;

d3[1].x:=0;d3[1].y:=0;d3[1].z:=0;

d3[2].x:=0;d3[2].y:=0;d3[2].z:=50;

d3[3].x:=0;d3[3].y:=50;d3[3].z:=0;

d3[4].x:=50;d3[4].y:=0;d3[4].z:=0;

….

out_text_XY('Oblique Projection', -150, 150, Yellow);

draw_tetra;

Readln;

theta:=45;

repeat

computer_oblique_matrix(theta, P);

ClearViewPort;

draw_tetra;

theta:=theta+1;

until KeyPressed;

Дана програма дає можливість візуально побачити різницю між різними проекціями і вибрати оптимальну для користувача.

2.3 Побудова поверхонь

Для побудови поверхні була використана формула 1.38 і показана можливість її виведення 2 способами, стандартними засобами та із використанням сторінки відеопам'яті.

function f(x,y: Real): Real;

begin

f:=20*Sin(t*Sqrt(x*x+y*y));

end;

procedure anim(tt: Byte);

begin

ux:=Abs(b-a)/(nx-1);

uy:=Abs(d-c)/(ny-1);

d3.x:=a; d3.y:=c; d3.z:=f(d3.x,d3.y);

project(P,d3,cc,d2[1,1]);

d2[1,1].x:=d2[1,1].x+GetMaxX div 2;

d2[1,1].y:=GetMaxy div 2 - d2[1,1].y;

xmin:=d2[1,1].x; xmax:=xmin;

ymin:=d2[1,1].y; ymax:=ymin;

for i:=1 to nx do

begin

d3.y:=c;

for j:=1 to ny do

begin

d3.z:=f(d3.x,d3.y);

project(P,d3,cc,d2[i,j]);

d2[i,j].x:=d2[i,j].x+GetMaxX div 2;

d2[i,j].y:=GetMaxY div 2 - d2[i,j].y;

if xmin>d2[i,j].x then xmin:=d2[i,j].x

else if xmax<d2[i,j].x then xmax:=d2[i,j].y;

if ymin>d2[i,j].y then ymin:=d2[i,j].y

else if ymax<d2[i,j].y then ymax:=d2[i,j].y;

d3.y:=d3.y+uy;

end;

d3.x:=d3.x+ux;

end;

SetColor(tt);

for i:=1 to nx do

begin

MoveTo(d2[i,1].x,d2[i,1].y);

for j:=2 to ny do LineTo(d2[i,j].x,d2[i,j].y);

end;

for j:=1 to ny do

begin

MoveTo(d2[1,j].x,d2[1,j].y);

for j:=1 to nx do LineTo(d2[i,j].y,d2[i,j].x);

end;

end;

Begin

open_graph;

t:= 0;

theta:= 20;

repeat

computer_dimetric_matrix(theta, P);

anim(12);

anim(0);

t:=t+0.0001;

delay(10000);

until KeyPressed;

Відмінність у побудові поверхні із використанням відеопам'яті полягає в тому, що немає необхідності перемальовувати зображення щоразу, а просто зміннюючи відеосторінку, очищаємо її на активній малюємо малюнок і робимо її видимою:

SetGraphMode(VGAMed);

k:=1;

t:= 0;

theta:= 20;

repeat

computer_dimetric_matrix(theta, P);

k:=1-k;

SetActivePage(k);

ClearDevice;

anim(12);

SetActivePage(k);

t:=t+0.001;

until Keypressed;

2.4 Відсікання невидимих ліній, використання модуля Graph3d

Нижче, у відповідності до формул 1.35 - 1.37 реалізовано алгоритм відсікання невидимих частин алгоритмом сортування граней. Для цього використали побудову тетраедра. Перш ніж вивести на екран грань проводимо обрахунок чи є вона видима чи ні, і в залежності від результату проводимо прорисовку.

procedure draw_poly(j, color: Word);

var

vertex: array[1..3] of PointType;

i,k:Word;

begin

i:=1;

k:=1;

repeat

if i<>j then

begin

project(P,d3[i], c, d2[k]);

inc(k);

end;

Inc(i);

until k=4;

SetFillStyle(SolidFill, color);

FillPoly(3, d2);

end;

Для повного відображення можливостей модуля Graph3d було реалізовано ряд програм, зокрема: Surf3.pas - відображення рухомої поверхні подібної до розходження хвиль від джерела удару; Solar.pas - імітація руху планет навколо сонця, використовує диметричну проекцію та працює з використанням відеосторінок; MY_3D.pas - забезпечує реалізацію основних елементів перетворення у просторі а саме, клавіші відповідають:

- PgUp - поворот точок за годинниковою стрілкою навколо осі Z;

- PgDn - поворот точок проти годинникової стрілки навколо осі Z;

- Home- поворот точок за годинниковою стрілкою навколо осі X;

- End - поворот точок проти годинникової стрілки навколо осі X;

- Insert- поворот точок за годинниковою стрілкою навколо осі Y;

- Delete - поворот точок проти годинникової стрілки навколо осі Y;

- "Q" - рух по осі Z в додатному напрямку;

- "E" - рух по осі Z в протилежному напрямку;

- "W" - рух по осі Y в додатному напрямку;

- "S" - рух по осі Y в протилежному напрямку;

- "A" - рух по осі X в додатному напрямку;

- "D" - рух по осі X в протилежному напрямку;

- "+" - збільшити масштаб;

- "-" - зменшити масштаб.

Дана програма використовує диметричну проекцію побудови зображень та не використовує роботи з відеопам'яттю.

ВИСНОВКИ

Проаналізувавши проблему використання комп'ютерної графіки, зокрема об'ємних фігур, ролі анімації та методів її відображення і у відповідності до мети курсової роботи було виконано наступне:

1. проведено детальний аналіз літератури та Інтернет-джерел за темою "Тривимірна графіка. Анімація"; 2. виокремлення основних понять, формул і методів роботи із об'єктами у тривимірному просторі;3. проведено детальний аналіз розділу математики "Вектори, матриці", де було виокремлено основні поняття по роботі з векторами, матрицями, які спрощують розуміння учнями основних подій в 3d просторі; 4. практично реалізовано основні алгоритми роботи по діям над точкою в просторі:

- рух;

- поворот;

- масштабування;

5. сформовано лекційний теоретичний матеріали.

Результатом роботи є лекційний курс по програмування тримірної графіки та методика відображення анімаційних проектів з допомогою стандартних засобів мови програмування Pascal, без використання сторонніх бібліотек. Даний лекційний курс побудований лише на математичних функціях і їх використанні на мові програмування. Він охоплює такі області як векторна, матрична математика. Даний курс доповнений реалізованими прикладами, що дають практичне уявлення про застосування математичних моделей у програмуванні, вчать аналітично реалізовувати поставленні завдання, покладаючись на різноманітні алгоритми та методи. Кінцевий продукт має практичну цінність у застосуванні при роботі із поєднання програмування із математикою, даючи наглядне розуміння взаємодії і використання математичних методів та фунцій, їх застосування на практиці.

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

1. Turbo Pascal - Издательская група К.: ВНV, 2000. - 320 с.

2. Абрамов В. Г. Введение в язык Pascal: Учебное пособие для студентов вузов по специальности Прикладная математика. - М.: Наука, 1988. - 158 с.

3. Абрамов С. А. Начала программирования на языке Pascal. - М.: Наука, 1987. - 126 с.

4. Аммерал А. Машинная графика на языке С, в 4-х томах, изд-во Сол. Систем, - 1992. - 230 с.

5. Власик А.П. Практикум з програмування в середовищі Turbo Pascal. - Рівне. - НУВГ,- 53 с.

6. Вэн-Дэм. А. Основы интерактивной машинной графики, т.1-2, М. Мир, 1985. - 257 с.

7. Гилой. Интерактивная машинная графика. - М., Мир, -1981. - 210 с.

8. Грайс. Графические средства персональных компьютеров. - М., - Мир, 1980. - 142 с.

9. Грис Д. Наука программирования. M.: Мир, 1984. - 230 с.

10. Джонс Ж., Харроу К. Решение задач в системе Турбо Паскаль. М, 1991. - 709 с.

11. Жикин А.Е. Компьютерная графика. Динамика, реалистические ихображения, М., Диалог-МИФИ, - 1995 - 324 с.

12. Зуев Е. А. Язык программирования Турбо Паскаль 6.0, 7.0. - М.: Радио и связь, 1993. - 150 с.

13. Ковалюк Т.В. Основи програмування. Київ: Видавнича група ВНV, 2005. - 385 с.

14. Культин Н. Б. Программирование в TurboPascal 7.0 и Delphi. - Санкт- петербург,1999. - 120 с.

15. Майкл Ласло. Вычислительная геометрия и компьютерная графика на С++. Москва - Бином, 1997. - 440 с.

16. Марченко А.И., Марченко Л.А. Программирование в среде Turbo Pascal 7.0. К.: ВЕК, - 2000. - 441 с.

17. Немнюгин С.А. Turbo Pascal Практикум. 2-е издание. - С-Пб., - Питер- 2003, - 267 с.

18. Перминов О. Н. Программирование на языке Паскаль. - М.: Радио и связь, - 1988. - 97 с.

19. Перминов О. Н. Язык программирования Pascal. - М.: Радио и связь,- 1989. - 205 с.

20. Препарата Ф. Вычислительная геометрия: Введение, М. Мир, 1989. ч.1.- Рівне: НУВГП, 2005. - 179 с.

21. Роджерс, Адамс, Математические основы машинной графики, - М.? Машиностроение, - 1985.- 102 c.

22. Роджерс С.А. алгоритмические основы машинной графики. М. Мир, 1989. - 235 с.

23. Тихомиров Ю. Программирование трехмерной графики, С.-Пб.: БХВ_Санкт-Петербург,1999. - 350 с.

24. Томпсон Н. Секреты программирования трехмерной графики для Windows 95. Перев с англ. - СПб: Питер, - 1997. - 352 с.

25. Фокс А. Вычислительная геометрия, М., Мир, - 1982. - 421 с.

26. Хонич А. Как самому создать трехмерную игру. М.:МИКРОАРТ, 1996. - 220 с.

Страницы: 1, 2, 3



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.