Presunięie (trnslj): u w v Sklownie: s s s Orót wokół osi X: os os Orót wokół osi Y: os os Orót wokół osi Z: os os Do wnni orów prekstłeń stosuje się miere 4-wiersowe w tw. pisie jednorodnm https://pl.wikipedi.org/wiki/wsp%c3%b3%c5%82r%c4%99dne_jednorodne Punkt, któr m współrędne (,, ) jest predstwin w posti jednorodnej (,,, ). PRZEKSZTAŁCENIA 3D (,, ) (,,) wor mierowe ---------------------------------------------- ) Presunięie o wektor (v, w, u) 2) Sklownie o skli (s, s, s) 3) Orot o kąt
Prkłd stosowni: Orot 3D (kod w jęku Psl w trie grfinm) --------------------------------------------------------------------------------------------------------------------------- Zmist modułu Crt stosowno iliotekę WinCrt w elu pewnieni włśiwego diłni wrunku KePressed. Koniene jest użie stndrdowego modułu Grph. Progrm powl n ornie grnistosłup trójkątnego pr użiu klwis strłek. Ropoęie wświetlni nstępuje po niśnięiu klwis <ENTER > lu <SPACJA>. Zkońenie progrmu po niśnięiu klwis <ESC>. Drone modfikje progrmu dotąe ilośi wierhołków i współrędnh poątkowh ukłdu XYZ umożliwiją usknie rsunków innh wielośinów możliwośią ih orotów.
progrm rl_4; uses WinCrt,Grph; tpe mier=rr[..4,..4] of rel; tp=rr [..6] of mier; vr nk :hr; kod :integer; orot,orot,orot :integer; p,p,p :rel; figur :tp; T,R,R,R,Skl,A,B :mier; {***************** BUFOR *****************} proedure ufor; egin while kepressed do nk:=redke; {********** ILOCZYN MACIERZY ************} proedure ilon(m,n,p :integer;a,b :mier;vr C :mier); vr i,j,k :integer; sum :rel; egin for i:= to m do for j:= to p do egin
sum:=; for k:= to n do sum:=sum+a[i,k]*b[k,j]; C[i,j]:=sum; {********** KRAWEDZ ************} proedure krwed(vr fig3d :tp; n,n2 :te;,,kolor :integer); vr,,2,2 :integer; egin setolor(kolor); :=round(fig3d[n][,]); :=round(fig3d[n][2,]); 2:=round(fig3d[n2][,]); 2:=round(fig3d[n2][2,]); line(+,+,2+,2+); {********** OBROT X *************} proedure m_r(lf: rel); vr i,j :integer; kt :rel; egin for i:= to 4 do egin for j:= to 4 do R[i,j]:=; R[i,i]:=; kt:=lf*pi/8; R[2,2]:=os(kt); R[3,3]:=R[2,2]; R[2,3]:=(kt); R[3,2]:=-R[2,3]; {********** OBROT Y *************} proedure m_r(lf: rel); vr i,j :integer; kt :rel; egin for i:= to 4 do egin for j:= to 4 do R[i,j]:=; R[i,i]:=; kt:=lf*pi/8; R[,]:=os(kt); R[3,3]:=R[,]; R[3,]:=(kt); R[,3]:=-R[3,];
{********** OBROT Z *************} proedure m_r(lf: rel); vr i,j :integer; kt :rel; egin for i:= to 4 do egin for j:= to 4 do R[i,j]:=; R[i,i]:=; kt:=lf*pi/8; R[,]:=os(kt); R[2,2]:=R[,]; R[,2]:=(kt); R[2,]:=-R[,2]; {********** WSPOLRZEDNE *************} proedure wsp(vr fig3d :tp; n :te;,, :rel); egin fig3d[n][,]:=; fig3d[n][2,]:=; fig3d[n][3,]:=; fig3d[n][4,]:=; {********** WSPOLRZEDNE POCZATKOWE ********} proedure wsp_po; egin wsp(figur,,-4,-4,-); wsp(figur,,,-4,-); wsp(figur,2,,-4,); wsp(figur,3,-4,4,-); wsp(figur,4,,4,-); wsp(figur,5,,4,); wsp(figur,6,,-4,-); {*************** RYSUJ **********} proedure rsuj(, :integer); vr i,j :integer; egin krwed(figur,,,,,); krwed(figur,,2,,,); krwed(figur,2,,,,); krwed(figur,3,4,,,); krwed(figur,4,5,,,); krwed(figur,5,3,,,); krwed(figur,,3,,,); krwed(figur,,4,,,); krwed(figur,2,5,,,);
{************** GRAFIKA *************} proedure grfik; vr krt,tr :integer; egin krt:=detet; InitGrph(krt,tr,''); {************* RYSUNEK ***********} proedure rsunek; vr k: integer; egin r(8,25,64,454); rsuj(34,24); del(); for k:= to 6 do egin ilon(4,4,,b,figur[k],a); figur[k]:=a; del(); {************** MAIN ************} egin wsp_po; grfik; lerdevie; setfillstle(,5); REPEAT ufor; repet m_r(); m_r(); m_r(); ilon(4,4,4,r,r,b); repet until kepressed; kod:=ord(redke); until ((kod=75) or (kod=72) or (kod=77) or (kod=8) or (kod=3) or (kod=32) or (kod=27)); se kod of 72: egin orot:=5; m_r(orot); ilon(4,4,4,r,r,b); rsunek; 8: egin orot:=-5; m_r(orot); ilon(4,4,4,r,r,b); rsunek; 77: egin
orot:=5; m_r(orot); ilon(4,4,4,r,r,b); rsunek; 75: egin orot:=-5; m_r(orot); ilon(4,4,4,r,r,b); rsunek; 27: egin lerdevie; hlt; {se} rsunek; UNTIL =2; READLN; CloseGrph; end.