Розробка комплексної геометричної моделі просторового інженерного об‘єкта та її реалізація програмними засобами

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
О
Факультет:
КН
Кафедра:
Системи автоматизованого проектування

Інформація про роботу

Рік:
2020
Тип роботи:
Звіт
Предмет:
Інформаційні технології

Частина тексту файла

Міністерство освіти і науки України Національний університет «Львівська політехніка» Інститут компютерних наук та інформаційних технологій
Кафедра «Системи автоматизованого проектування»
Звіт до графічно-розрахункової роботи з курсу: «Геометричне моделювання у конструюванні інженерних обєктів і систем» на тему:
«Розробка комплексної геометричної моделі просторового інженерного обєкта
та її реалізація програмними засобами»
Львів 2008р.
Національний
університет
“Львівська
політехніка”
/назва вищого учбового закладу/ Кафедра

”Системи автоматизованого проектування”
Дисципліна “Геометричне моделювання у конструюванні інженерних об’єктів та систем”
Спеціальність
інформаційні технології проектування
Курс
4
Група
КН-4
Семестр
8
Завдання на графічно-розрахункову роботу студента
Дупака Богдана Петровича
/прізвище, ім’я, по батькові/
1. Тема проекту /роботи/
Розробка комплексної геометричної моделі просторового
об’єкта та її реалізація програмними засобами
Термін здачі студентом закінченого проекту /роботи/
26.05.2008
Вихідні дані для проекту /роботи/
ескізне видове зображення
просторового інженерного об’єкта
4. Зміст розрахунково-пояснюючої записки /перелік питань, які підлягають розробці/
Алгоритм розв’язку завдання (словесний покроковий опис чи блок-схеми). Комбінаційна модель геометричного об’єкта з графічною побудовою. Каркасна модель геометричного об’єкта з графічною побудовою. Матриця суміжності з відповідною нумерацією вершин графа та зазначенням її на графічній побудові. Матриця інцеденції з відповідною нумерацією вершин та дуг графа та зазначенням її на графічній побудові. Визначення придатної для розробки та реалізації розробленої моделі системи координат та перетворення системи координат.
Математичне задання класичних кривих (окружність, еліпс, гіпербола, парабола, кардіоїда тощо), які використовуються у геометричному моделюванні. Побудувати криву Без’є на основі шести вершин багатокутника, яка описує елемент геометрії об’єкта побудови. Здійснити опис визначених колірних областей об’єкту засобами колірних моделей, здійснити перевід кольору з одної колірної моделі в іншу. Реалізувати програмно побудову кривих
засобами графічних функції Windows-інтерфейса (WinAPI). Розробити алгоритм афінних перетворень геометричних елементів об’єкту та запрограмувати анімацію. Реалізувати програмно з використанням OpenGL
5. Перелік графічного матеріалу /з точним зазначенням обов’язкових креслень/
Комбінаційна модель геометричного об’єкта. Каркасна модель геометричного об’єкта. Графічні побудови кривих у визначеній системі(-ах) координат. Результати графічної програмної побудови.
6. Дата видачі завдання
11.02.2008
Календарний
план
п-п Назва етапів роботи Термін виконання Етапів роботи Примітка Ознайомитися зі засобами опису та задання моделей геометрії просторових об’єктів 11.02.2008 - 01.05.2008 Критичне опрацювання інформаційних джерел за напрямками 19.02.2008 - 13.05.2008 Критичний аналіз та обрання напрямку реалізації завдання 26.02.2008 - 30.04.2008 Виокреслення задач, розробка плану-алгоритму розробки 26.02.2008 – 28.02.2008 Побудова комбінаційної моделі геометричного об’єкта з графічною побудовою 23.04.2008 – 07.05.2008 Побудова каркасної моделі геометричного об’єкта з графічною побудовою 26.04.2008 – 13.05.2008 Побудова матриці суміжності з відповідною нумерацією вершин графа та зазначенням її на графічній побудові 26.04.2008 – 13.05.2008 Побудова матриці інцеденції з відповідною нумерацією вершин та дуг графа та зазначенням її на графічній побудові 26.04.2008 – 13.05.2008 Визначення придатної для розробки та реалізації розробленої моделі системи координат та перетворення системи координат. 01.03.2008 – 11.03.2008 Математичне задання класичних кривих (окружність, еліпс, гіпербола, парабола, кардіоїда тощо), які використовуються у геометричному моделюванні 12.03.2008 – 25.03.2008 Побудова кривої Без’є на основі шести вершин багатокутника, яка описує елемент геометрії об’єкта побудови 26.03.2008 – 09.04.2008 Опис визначених колірних областей об’єкту засобами колірних моделей, здійснення переводу кольору з одної колірної моделі в іншу. 12.02.2008 – 25.02.2008 Реалізація програмної побудови кривих
засобами графічних функції Windows-інтерфейса (WinAPI). 19.03.2008 – 26.03.2008 Розробка алгоритму афінних перетворень геометричних елементів об’єкту та програмування анімації 05.03.2008 – 12.03.2008 Програмна реалізація з використанням OpenGL
01.05.2008 - 13.05.2008 Остаточне оформлення звіту до роботи 14.05.2008 - 15.05.2008
Студент
Дупак Богдан Петрович
/підпис/
/прізвище, ім’я, по батькові/
Керівник
Маркелов Олександр Едуардович
/підпис/
/прізвище, ім’я, по батькові/

26

травня
2008 р.
Графічні можливості мови Turbo Pascal версії 7.0
Побудувати програму заповнення екрану випадковими лініями.
program lab1; uses graph, crt; const
Solidln=0;
Dottedlln=1;
Centerln=2;
Dashedln=3;
UserBitln=4; var
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
x1,x2,x3,x4,x5,x6,x7: integer; begin
grDriver := Detect;
InitGraph(grDriver, grMode,'c:tp71bgi');
{Initsializye grafichnuu rezhum}
ErrCode := GraphResult;
if ErrCode = grOk then
begin
{ Do graphics }
randomize;
repeat
x1:=random(640)+1;
x2:=random(480)+1;
X3:=random(640)+1;
x4:=random(480)+1;
x5:=random(3)+1;
x6:=random(4)+1;
x7:=random(15)+1;
setcolor(x7);
{Xaotuchno zadae kolir linii}
SetLineStyle(x6,0,x5); {Xaotuchno zadae stul linii}
line(x1,x2,x3,x4);
{Xaotuchno malyue liniyu}
until keypressed;
CloseGraph;
end
else
Writeln('Graphics error:', GraphErrorMsg(ErrCode)); end.
Афінні перетворення та анімація засобами мови Turbo Pascal версії 7.0 Написати імітаційну програму із застосуванням афінних перетворень, яка дозволяє в автоматичному та при ручному керуванні створювати динамічно змінну візуалізацію, при якій моделюється процес випару суміші трьох рідин із різною температурою кипіння.

ТЕКСТ ПРОГРАМИ Program lab2_gr; Uses
Crt, Graph; Type
coord=record
x,y:integer
end;
zv=^pointer;
pointer=record
cord:coord;
col:word;
prev:zv;
next:zv
end; Label
l1; Var
driver,mode,maxX,maxY,i,x,y,k,la2,la3:integer;
cords:array[1..10] of coord;
ozn1,ozn2,ozn3,choise:byte;
vbaz,vcur,vlast:zv;
colbuf,kol:word;
ch:char;
str:string; Procedure setcoords; Begin
cords[1].x:=0;
cords[1].y:=200;
cords[2].x:=100;
cords[2].y:=190;
cords[3].x:=150;
cords[3].y:=205;
cords[4].x:=220;
cords[4].y:=195;
cords[5].x:=300;
cords[5].y:=180;
cords[6].x:=410;
cords[6].y:=195;
cords[7].x:=550;
cords[7].y:=205;
cords[8].x:=580;
cords[8].y:=220;
cords[9].x:=600;
cords[9].y:=170;
cords[10].x:=639;
cords[10].y:=200; End; Procedure fon; Var
ifon:integer; Begin
setcolor(colbuf);
if ozn10 then
begin
moveto(0,250);
for ifon:=1 to 10 do lineto(cords[ifon].x,cords[ifon].y);
lineto(maxX,250); lineto(0,250);
setfillstyle(10,14);
floodfill(10,240,colbuf)
end;
if ozn20 then
begin
rectangle(0,la2,639,300);
setfillstyle(10,12);
floodfill(10,275,colbuf)
end;
if ozn30 then
begin
rectangle(0,la3,maxX,maxY);
setfillstyle(10,13);
floodfill(10,maxY-2,colbuf)
end End; Procedure delbuble; Begin
if vbaznil then
begin
vcur:=vbaz;
vbaz:=vbaz^.next;
vbaz^.prev:=nil;
vcur^.next:=nil;
dispose(vcur)
end End; Procedure addbuble(adx,ady:integer;adkol:word); Begin
if vbaz=nil then
begin
new(vbaz);
vbaz^.prev:=nil;
vbaz^.next:=nil;
vbaz^.cord.x:=adx;
vbaz^.cord.y:=ady;
vbaz^.col:=adkol
end
else
begin
vcur:=vbaz;
while vcur^.nextnil do vcur:=vcur^.next;
new(vcur^.next);
vcur^.next^.prev:=vcur;
vcur:=vcur^.next;
vcur^.next:=nil;
vcur^.cord.x:=adx;
vcur^.cord.y:=ady;
vcur^.col:=adkol;
vlast:=vcur
end End; Procedure buble(ibub:integer); Var
j:integer; Begin
if ibub=1 then for j:=1 to ozn1 do
begin
x:=random(maxX);
y:=185+random(55);
kol:=14;
addbuble(x,y,kol)
end;
if ibub=2 then for j:=1 to ozn2 do
begin
x:=random(maxX);
y:=260+random(30);
kol:=12;
addbuble(x,y,kol)
end;
if ibub=3 then for j:=1 to ozn3 do
begin
x:=random(maxX);
y:=maxY-random(39);
kol:=13;
addbuble(x,y,kol)
end End; Procedure bubles; Var
bx,by:integer; Begin
vcur:=vbaz;
while vcurnil do
begin
bx:=vcur^.cord.x;
by:=vcur^.cord.y;
setcolor(vcur^.col);
circle(bx,by,4);
vcur:=vcur^.next
end;
setcolor(colbuf) End; Procedure analyze; Label
1; Begin 1:
while vbaz^.cord.y=0 do delbuble;
vcur:=vbaz^.next;
while vcur^.nextnil do
begin
if vcur^.cord.y=0 then
begin
if vcur^.nextnil then vcur^.next^.prev:=vcur^.prev;
vcur^.prev^.next:=vcur^.next;
dispose(vcur);
goto 1
end;
vcur:=vcur^.next
end End; Procedure adcordbu(speed:integer); Begin {
while vbaz^.cord.y<=1 do delbuble;}
vcur:=vbaz;
while vcurnil do
begin
vcur^.cord.y:=vcur^.cord.y-speed;
vcur:=vcur^.next
end; {
analyze} End; Begin l1:
writeln('Enter your chosie:');
writeln('1-Manual animation;');
writeln('2-Automatic animation.');
readln(str);
if str='1' then choise:=1 else
if str='2' then choise:=2 else choise:=0;
if (choise1) and (choise2) then
begin
writeln('WRONG choise!!!');
goto l1
end;
driver:=3;
mode:=1;
InitGraph(driver,mode,'');
maxX:=GetMaxX;
maxY:=GetMaxY;
colbuf:=10;
setcoords;
la2:=250; la3:=300;
ozn1:=1; ozn2:=1; ozn3:=1;
vbaz:=nil; vcur:=nil;
Randomize;
for i:=1 to 100 do
begin
if (i div 5)=ozn1 then ozn1:=ozn1+1;
if (i div 40)=ozn2 then ozn2:=ozn2+1;
if (i div 40)=ozn3 then ozn3:=ozn3+1;
if (i mod 3 = 0) and (ozn10) then
for k:=1 to 10 do cords[k].y:=cords[k].y+1;
if (ozn1=0) and (ozn20) then la2:=la2+1;
if (i mod 2=0) and (ozn2=0) then la3:=la3+3;
if i>50 then
begin
ozn1:=0;
ozn2:=ozn2+2;
ozn3:=ozn3+0
end;
if i>75 then
begin
ozn2:=0;
ozn3:=ozn3+2
end;
if ozn10 then buble(1);
if ozn20 then buble(2);
if ozn30 then buble(3);
fon;
bubles;
adcordbu(1);
if choise=1 then ch:=readkey;
if ch='a' then choise:=2;
if choise=2 then delay(100);
ClearViewPort
end;
addbuble(maxX,maxY,13);
while {vbaz^.cord.y>=30} vlast^.cord.y>=1 do
begin
bubles;
adcordbu(3);
delay(5);
ClearViewPort
end;
moveto(trunc(maxX/2),trunc(maxY/2));
setcolor(white);
outtext('The End.');
moverel(-100,15); outtext('(Press any key to exit)');
readkey;
closegraph; End.
Графічна функції Windows-інтерфейса (WinAPI). Засобами Borland Pascal 7.0 for Windows та Borland Delphi Текст програми unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls, Buttons;
type
TForm1 = class(TForm)
Image1: TImage;
TrackBar1: TTrackBar;
Label1: TLabel;
Label2: TLabel;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
RadioButton4: TRadioButton;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Label3: TLabel;
TrackBar2: TTrackBar;
Label4: TLabel;
CheckBox2: TCheckBox;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
Label5: TLabel;
Label6: TLabel;
ComboBox3: TComboBox;
procedure BitBtn2Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Label4Click(Sender: TObject);
procedure TrackBar2Change(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure ComboBox3Change(Sender: TObject);
procedure Label5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
k,f,x,y,rx,ry,kd,fd:integer;
colGr1,colGr2,colAx:TColor;
implementation
{$R *.dfm}
Procedure FonDraw; Begin
Form1.Image1.Canvas.FillRect(Rect(0,0,Form1.Image1.Width,Form1.Image1.Height)); End; Procedure DrawAxes; Begin
k:=Form1.TrackBar1.Position;
Form1.Image1.Canvas.Pen.Color:=colAx;
Form1.Image1.Canvas.MoveTo(0,Trunc(Form1.Image1.Height/2));
Form1.Image1.Canvas.LineTo(Form1.Image1.Width,Trunc(Form1.Image1.Height/2));
Form1.Image1.Canvas.MoveTo(Trunc(Form1.Image1.Width/2),0);
Form1.Image1.Canvas.LineTo(Trunc(Form1.Image1.Width/2),Form1.Image1.Height);
Form1.Image1.Canvas.Pen.Color:=clSilver;
x:=Trunc(Form1.Image1.Width/2);
while x0 do
begin
x:=x-k;
Form1.Image1.Canvas.MoveTo(x,0);
Form1.Image1.Canvas.LineTo(x,Form1.Image1.Height);
end;
y:=Trunc(Form1.Image1.Height/2);
while y0 do
begin
y:=y-k;
Form1.Image1.Canvas.MoveTo(0,y);
Form1.Image1.Canvas.LineTo(Form1.Image1.Width,y);
end; End; Function fy1(fx:integer):real; Begin
fy1:=(sqr(fx)-1)/(sqr(sqr(fx))+1) End; Function fy2(fx:integer):real; Begin
fy2:=-sqr(sqr(fx))*fx+2*sqr(fx)*fx-1; End;
Function fy1D(fxD:real):real; Begin
fy1D:=(sqr(fxD)-1)/(sqr(sqr(fxD))+1) End; Function fy2D(fxD:real):real; Begin
fy2D:=-sqr(sqr(fxD))*fxD+2*sqr(fxD)*fxD-1; End;
Procedure Grafic(pg:integer); Begin
if pg=1 then
begin
FonDraw;
DrawAxes
end
else if pg=2 then
begin
Form1.Image1.Canvas.Pen.Color:=colGr1;
rx:=0;
ry:=Trunc(fy1(rx));
x:=Trunc(Form1.Image1.Width/2)+k*rx;
y:=Trunc(Form1.Image1.Height/2)-k*ry;
Form1.Image1.Canvas.MoveTo(x,y);
while x0 do
begin
rx:=rx-1;
ry:=Trunc(fy1(rx));
x:=Trunc(Form1.Image1.Width/2)+k*rx;
y:=Trunc(Form1.Image1.Height/2)-k*ry;
Form1.Image1.Canvas.LineTo(x,y);
end
end
else if pg=3 then
begin
Form1.Image1.Canvas.Pen.Color:=colGr2;
rx:=0;
ry:=Trunc(fy2(rx));
x:=Trunc(Form1.Image1.Width/2)+k*rx;
y:=Trunc(Form1.Image1.Height/2)-k*ry;
Form1.Image1.Canvas.MoveTo(x,y);
while x0 do
begin
rx:=rx-1;
ry:=Trunc(fy2(rx));
x:=Trunc(Form1.Image1.Width/2)+k*rx;
y:=Trunc(Form1.Image1.Height/2)-k*ry;
Form1.Image1.Canvas.LineTo(x,y);
end
end End; Procedure func; Begin
if Form1.RadioButton1.Checked then f:=1
else if Form1.RadioButton2.Checked then f:=2
else if Form1.RadioButton3.Checked then f:=3
else if Form1.RadioButton4.Checked then f:=4;
case f of
1:Grafic(1);
2:Grafic(2);
3:Grafic(3);
4:Begin
Grafic(2);
Grafic(3)
end
end; End;
Procedure GraficD(pgD:integer); Var dx,dy,krok:real; Begin
if pgD=2 then
begin
Form1.Image1.Canvas.Pen.Color:=colGr1;
krok:=1/(10*kd);
dx:=0;
x:=Trunc(Form1.Image1.Width/2);
dy:=fy1D(dx);
y:=Trunc(Form1.Image1.Height/2-dy*(kd*10));
Form1.Image1.Canvas.MoveTo(x,y);
while x0 do
begin
dx:=dx-krok;
x:=x-1;
dy:=fy1D(dx);
y:=Trunc(Form1.Image1.Height/2-dy*(kd*10));
Form1.Image1.Canvas.LineTo(x,y);
end;
end
else if pgD=3 then
begin
Form1.Image1.Canvas.Pen.Color:=colGr2;
krok:=1/(10*kd);
dx:=0;
x:=Trunc(Form1.Image1.Width/2);
dy:=fy2D(dx);
y:=Trunc(Form1.Image1.Height/2-dy*(kd*10));
Form1.Image1.Canvas.MoveTo(x,y);
while x0 do
begin
dx:=dx-krok;
x:=x-1;
dy:=fy2D(dx);
y:=Trunc(Form1.Image1.Height/2-dy*(kd*10));
Form1.Image1.Canvas.LineTo(x,y);
end;
end End; Procedure DrawAxesD; Var DADi:integer; Begin
Form1.Image1.Canvas.Pen.Color:=colAx;
Form1.Image1.Canvas.MoveTo(0,Trunc(Form1.Image1.Height/2));
Form1.Image1.Canvas.LineTo(Form1.Image1.Width,Trunc(Form1.Image1.Height/2));
Form1.Image1.Canvas.MoveTo(Trunc(Form1.Image1.Width/2),0);
Form1.Image1.Canvas.LineTo(Trunc(Form1.Image1.Width/2),Form1.Image1.Height);
Form1.Image1.Canvas.MoveTo(Form1.Image1.Width,Trunc(Form1.Image1.Height/2));
Form1.Image1.Canvas.LineTo(Form1.Image1.Width-10,Trunc(Form1.Image1.Height/2)-6);
Form1.Image1.Canvas.MoveTo(Form1.Image1.Width,Trunc(Form1.Image1.Height/2));
Form1.Image1.Canvas.LineTo(Form1.Image1.Width-10,Trunc(Form1.Image1.Height/2)+6);
Form1.Image1.Canvas.MoveTo(Trunc(Form1.Image1.Width/2),0);
Form1.Image1.Canvas.LineTo(Trunc(Form1.Image1.Width/2)-6,10);
Form1.Image1.Canvas.MoveTo(Trunc(Form1.Image1.Width/2),0);
Form1.Image1.Canvas.LineTo(Trunc(Form1.Image1.Width/2)+6,10);
Form1.Image1.Canvas.Pen.Color:=clSilver;
x:=Trunc(Form1.Image1.Width/2);
DADi:=0;
Антиботан аватар за замовчуванням

01.01.1970 03:01

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Новини