отриманої фігури (висновок точок, з яких складається фігура проводиться безпосередньо в відеопам'ять за допомогою бібліотеки DOS Turbo Pascal), збільшення кута повороту. Коли користувач натисне будь-яку клавішу на клавіатурі, програма встановить первинний графічний режим і завершить свою роботу. p> Розглянемо процедуру відтворення лінії. Для малювання лінії використовувався алгоритм Брезенхема (рис. 3.2). p> Блок-схема процедури відтворення лінії
В
Рис 3.2
На рис.3.3 зображена блок-схема повороту всієї фігури на кут повороту. Спочатку фігура повертається на нульовий кут щодо осі X, потім на 15 градусів щодо осі Y, потім на 45 градусів відносно Z.
Блок-схема процедури повороту всієї фігури
тривимірний графічний програма отрисовка
В В
Рис. 3.3
В В
Рис 3.3
ВИСНОВОК
Метою даної курсової роботи було проектування динамічної тривимірної сцени в нестандартному графічному режимі 320х200 точок на 256 кольорів. Необхідно було виконати чималу роботу (ознайомитися з проективними перетвореннями, проекціями на площину, з перетвореннями кутами повороту; скласти математичну модель). p> Даний проект видається авторові досить важливим, оскільки може знайти своє застосування в освіті (він може бути використаний для моделювання тривимірних фігур і демонстрації їх студентам). До того ж він може бути цікавий людям, які цікавляться комп'ютерною графікою і системами автоматизованого проектування. br/>
ДОДАТОК 1
ТЕКСТ ПРОГРАММИdos, crt;
type = record
x, y, z: real;; = record
point1, point2: integer;;: array [0 .. 200] of tpoint;: array [0 .. 200] of tpoint;: array [0 .. 320] of temppoints: array of tpoint; var rpoints: array of tpoint);: integer;: = 0;: = yalpha/90;: = -45; xalpha <> 0 theni: = 0 to numpoints do
begin
rpoints [i]. z: = temppoints [i]. y * sin (xalpha) + temppoints [i]. z * cos (xalpha);
end; yalpha <> 0 thenxalpha <> 0 then move (rpoints, temppoints, sizeof (points)); i: = 0 to numpoints then (xalpha <> 0) or (yalpha <> 0) then move (rpoints, temppoints, sizeof (points)); i: = 0 to numpoints to numpoints do
begin
rpoints [i]. x: = rpoints [i]. x/(1-rpoints [i]. z/v);
rpoints [i]. y: = rpoints [i]. y/(1-rpoints [i]. z/v);
end;; closegraph;: then
if x2-x1 <> 0 then ys: = (y2-y1)/(x2-x1) else ys: = 0;
if x1> x2 then
begin
swap (y1, y2); swap (x1, x2);
end;
for i: = 0 to abs (x2-x1) do
Drawp (x1 + i, y1 + round (i * ys), color)
if y2-y1 <> 0 then xs...