Программирование в Pascal. Моделирование 3D-объектов

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?го алгоритма для предложенной среды программирования и операционной системы;

реализация программы построения трехмерных объектов с анимацией.

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

Литература

 

1.Зуев Е.А. Программирование на языке TURBO PASCAL 6.0/7.0 М. Веста, Радио и связь, 1993.

2.Александр Фролов, Григорий Фролов Операционная система MS-DOS М.: Диалог-МИФИ, 1991.

.Эдвард Энджел Интерактивная компьютерная графика. Вводный курс. 2-е изд. Вильямс, 2001.

.Горнаков С.Г. Программирование компьютерных игр под Windows в XNA Game Studio Express. - М.: ДМК Пресс, 2008.

.Керниган Б.В., Пайк Р. UNIX - универсальная среда программирования. М.: Финансы и статистика, 1992.

Приложение

 

Код приложения

компьютерный графика трехмерный проекция

uses crt, graph; {подключение графических модулей}rad: real=0.01745329; {коэффициент преобразования градусов в радианы}{пользовательский тип "трехмерная"}d=record,y,z: real;;: integer; {переменная цикла}:integer;:char;,a2,a3:real;, grMode, grDriver: Integer; {переменные графического драйвера}tet: array[1..4] of d3d =

((x:50;y:80;z:50),

(x:50;y:0;z:80),

(x:100;y:0;z:0),

(x:0;y:0;z:0));cub: array[1..8] of d3d =

((x:-50;y:-50;z:50),

(x:-50;y:50;z:50),

(x:50;y:50;z:50),

(x:50;y:-50;z:50),

(x:-50;y:-50;z:-50),

(x:-50;y:50;z:-50),

(x:50;y:50;z:-50),

(x:50;y:-50;z:-50)

);cyl:array[0..21]of d3d;

{проверка грани на видимость} {a, b, c -координаты грани}TestGran(a, b, c: d3d): boolean;v1, w2, v2, w1, n: real; {внутренние переменные для построения нормали к грани}

{построение нормали}:=a.x-c.x;:=a.y-c.y;:=b.x-c.x;:=b.y-c.y;:=v1*w2-v2*w1; {проверка видимости}n>0 then:=true {грань видна}:=false; {грань не видна};

{процедура рисования граней} {p1, p2, p3 - координаты грани}

{col - цвет грани}DrawGran(p1, p2, p3,p4:d3d; col: byte);: array [1..4] of pointtype; {внутренний тип для заливки грани заданным цветом}TestGran(p1, p2, p3)=false then exit;(1, col); {определение типа заполнения }

{обработка внутренних переменные для заполнения }[1].x:=round(p1.x+320);[1].y:=round(p1.y+240);[2].x:=round(p2.x+320);[2].y:=round(p2.y+240);[3].x:=round(p3.x+320);[3].y:=round(p3.y+240);[4].x:=round(p4.x+320);[4].y:=round(p4.y+240);(zar[1].x=zar[4].x) and (zar[1].y=zar[4].y)fillpoly(3, zar)fillpoly(4, zar); {заполнить грань заданным цветом}(6, 1); {определение типа заполнения };

{процедура рисования вектора }DrawVector;i:integer;figura =1 then(tet[1],tet[2], tet[3],tet[1], 1);(tet[1],tet[3], tet[4],tet[1], 2);(tet[1],tet[4], tet[2],tet[1], 3);(tet[4],tet[3], tet[2],tet[4], 4);;figura =2 then(cub[4],cub[3], cub[2],cub[1], 11);(cub[5],cub[6], cub[7],cub[8], 12);(cub[1],cub[2], cub[6],cub[5], 13);(cub[3],cub[4], cub[8],cub[7], 14);(cub[2],cub[3], cub[7],cub[6], 15);(cub[5],cub[8], cub[4],cub[1], 16);;figura =3 theni:=1 to 9 do(cyl[0],cyl[i], cyl[i+1],cyl[0], i+7);(cyl[21],cyl[10+i+1], cyl[10+i],cyl[21], i+7);(cyl[10+i],cyl[10+i+1], cyl[i+1],cyl[i], i+7);;;;

{процедура поворота точки в трехмерном пространстве}

{xv, yv, zv - углы поворота точки в градусах}

{x, y, z - точка, которую нужно повернуть}rotate(xv,yv,zv:real; var x,y,z:real);Yt,Xt,Zt:real; {временные переменные}

{повернуть по оси y}:=Y*cos((xv*rad))-Z*sin((xv*rad));:=Y*sin((xv*rad))+Z*cos((xv*rad));:=Yt; Z:=Zt;

{повернуть по оси x}:=X*cos((yv*rad))-Z*sin((yv*rad));:=X*sin((yv*rad))+Z*cos((yv*rad));:=Xt; Z:=Zt;

{повернуть по оси z}:=X*cos((zv*rad))-Y*sin((zv*rad));:=X*sin((zv*rad))+Y*cos((zv*rad));:=Xt; Y:=Yt;;RotateAll;j:= 1 to 4 do rotate(a1,a2,a3,tet[j].x,tet[j].y,tet[j].z);j:= 1 to 8 do rotate(a1,a2,a3,cub[j].x, cub[j].y,cub[j].z);j:= 0 to 21 do rotate(a1,a2,a3,cyl[j].x,cyl[j].y,cyl[j].z);;:= Detect; {инициализация графического режима}(grDriver, grMode,);:= GraphResult;:=1;:=3;:=4;:=1;[0].z:=50;[21].z:=-50;j:=1 to 10 do[j].y:=50*sin(rad*(40*j));[j].x:=50*cos(rad*(40*j));[j].z:=50;[j+10].y:=50*sin(rad*(40*j));[j+10].x:=50*cos(rad*(40*j));[j+10].z:=-50;;ErrCode = grOk then{если инициализация успешна, то}(0); {установка цвета}(1000);;;(4000);;keypressed then:=0; {остановка вращения}:=0;:=0;:=readkey;;codekey of

w:a1:=4.0;

a:a2:=4.0;

s:a3:=4.0;

d:a2:=-4.0;

1:figura:=1;

2:figura:=2;

3:figura:=3;;CodeKey=#27; {выход по нажатию клавиши Esc};.