NATIJA USHBU TASVIRNI OLAMIZ
6 - Лаборатория машғулоти
Марказий катталаштирилган пpоекция.
Ишни бажаришдан мақсад: Компғютерга Turbo Pascal дастурлаш тили ёрдамида обoектни проекциясини ясаш дастурини тузиш, марказий катталаштирилган пpоекциясини хосил қилишни ўрганиш.
Лаборатория ишини бажариш учун керакли жихозлар:
IBM русумли компғютер, Turbo Pascal дастурлаш мухити.
1. Назарий қисм:
Марказий катталаштирилган пpоекция.
Обoектнинг марказий проекциясини қуйидаги тенглама ёрдамида олиш мумкин:
xp= d * x/z
yp= d * y/z
бу тенгламадаги d xp,yp координаталарига тегишли масштабни катталаштирувчи масофа хисобланади. Матрица кўринишида бу ўзгариш қуйидагича езилади:
-
|
1
|
0
|
0
|
0
|
|
0
|
1
|
0
|
0
|
Ммарк=
|
0
|
0
|
1
|
1/d
|
|
0
|
0
|
0
|
0
|
Яқиндаги обoектга нисбатан узоқдаги обoектнинг кичик кўринишининг сабаби Z га бўлиш фактоpидан келиб чиқади. Шунинг учун дастурда нолга бўлиш холатини кўриш мумкин. d кўпайтувчи А/B нисбатга тенг, бу ерда A - кузатувчи ситемаси ва текислик тасвири орасидаги масофа, В эса экран хажми. d параметрининг ўзгариши орқали катталашган ёки кичрайтирилган марказий проекцияни олиш мумкин. Агар d катта бўлса, проекция катталашади ва аксинча. Бизнинг холда катталашган проекция олинади, шунинг учун d нинг қиймати катта. Обoект координаталари x,y,z массивларида сақланади. Пpоекцилар xp,yp массивларига езилади. Хисобларни тезлаштириш учун CALC процедурасидан фойдаланилади. Унда синус ва косинусларнинг қийматлари хисобланади. Дастурда Turbo-Pascal системаси CRT,GRAPH модулларининг стандарт функцияларидан фойдаланилган.
DASTURI(TURBO PASKALDA)
uses crt,graph;
var
x,y,z:array[1..8] of integer;
xp,yp:array[1..8] of longint;
gd,gm:integer;dm,i,a,b,c,d:integer;
xc,yc:integer;
key:char;begin
a:=10; b:=10; c:=30;
d:=5; xc:=100; yc:=120;dm:=150;
x[1]:=a; y[1]:=0; z[1]:=2*b;
x[2]:=c; y[2]:=0; z[2]:=2*b;
x[3]:=c; y[3]:=d; z[3]:=2*b;
x[4]:=a; y[4]:=d; z[4]:=2*b;
x[5]:=-d; y[5]:=d; z[5]:=b;
x[6]:=-d; y[6]:=0; z[6]:=b;
x[7]:=c; y[7]:=0; z[7]:=b;
x[8]:=c; y[8]:=d; z[8]:=b;
gd:=detect;
initGRAPH(gd,gm,'d:\tp6');
setbkcolor(0);
while not keypressed do begin
setcolor(14);
for i:=1 to 8 do begin
xp[i]:=xc+round(dm*x[i]/(z[i]+1));
yp[i]:=getmaxy-yc+round(dm*y[i]/(z[i]+1)); end;
moveto(xp[1],yp[1]);
for i:=2 to 8 do begin
lineto(xp[i],yp[i]);
moveto(xp[i],yp[i]); end;
line(xp[1],yp[1],xp[6],yp[6]);
line(xp[5],yp[5],xp[8],yp[8]);
line(xp[3],yp[3],xp[8],yp[8]);
line(xp[1],yp[1],xp[4],yp[4]);
line(xp[2],yp[2],xp[7],yp[7]);
line(xp[1],yp[1],xp[3],yp[3]);
line(xp[2],yp[2],xp[4],yp[4]);
delay(10000);setcolor(0);
moveto(xp[1],yp[1]);
for i:=2 to 8 do begin
lineto(xp[i],yp[i]);
moveto(xp[i],yp[i]); end;
line(xp[1],yp[1],xp[6],yp[6]);
line(xp[5],yp[5],xp[8],yp[8]);
line(xp[3],yp[3],xp[8],yp[8]);
line(xp[1],yp[1],xp[4],yp[4]);
line(xp[2],yp[2],xp[7],yp[7]);
line(xp[1],yp[1],xp[3],yp[3]);
line(xp[2],yp[2],xp[4],yp[4]);
end;closegraph;end.
Do'stlaringiz bilan baham: |