Kui soovid kujundit pöörata ruumis, siis peaks olema teda hea
pöörata kolmes sõltumatus tasandis(edasi-paremale,
edasi-üles, paremale-üles). Põhimõte on sarnane kui
eelmises näites, vaid pinna asemel liigub kujund ruumis. Kauguse
koordinaati läheb vaja vaid pööramise arvutamiseks,
joonistamiseks piisab esialgu x ja y- koordinaadist.
|
|
uses graph, crt;
type
punkt=record
x: integer;
y: integer;
z: integer;
end;
punktid= array[1..100] of punkt;
var p, p2 : punktid;
keskp: punkt;
arv: integer;
nurk1, nurk2: real;
procedure algus;
var d, m: integer;
begin
p[1].x:=0;
p[1].Y:=0;
p[1].z:=100;
p[2].x:=100;
p[2].Y:=0;
p[2].z:=0;
p[3].x:=0;
p[3].Y:=100;
p[3].z:=0;
p[4].x:=0;
p[4].Y:=0;
p[4].z:=0;
p[5].x:=100;
p[5].Y:=0;
p[5].z:=0;
p[6].x:=0;
p[6].Y:=0;
p[6].z:=100;
arv:=6;
d:=detect;
initgraph(d, m, '');
keskp.x:=getmaxx div 2;
keskp.y:=getmaxy div 2;
end;
procedure joonista(p: punktid; kp: punkt; kogus: integer);
var i: integer;
begin
for i:=2 to kogus do
begin
line(kp.x+p[i-1].x, kp.y+p[i-1].y, kp.x+p[i].x, kp.y+p[i].y);
end;
line(kp.x+p[arv].x, kp.y+p[arv].y, kp.x+p[1].x, kp.y+p[1].y);
end;
procedure keera(pp: punktid; var pp2: punktid; kogus: integer; x1, x2:
real);
var i: integer;
begin
for i:=1 to kogus do begin
pp2[i].x:=round(pp[i].x*cos(x1)+pp[i].y*sin(x1));
pp2[i].y:=round(-pp[i].x*sin(x1)+pp[i].y*cos(x1));
pp2[i].z:=pp[i].z;
end;
for i:=1 to kogus do begin
pp2[i].x:=round(pp2[i].x*cos(x2)+pp2[i].z*sin(x2));
pp2[i].z:=round(-pp2[i].x*sin(x2)+pp2[i].z*cos(x2));
end;
end;
begin
algus;
nurk1:=0;
repeat
setcolor(black);
joonista(p2, keskp, arv);
keera(p, p2, arv, 0.3, nurk1);
setcolor(white);
joonista(p2, keskp, arv);
delay(50);
nurk1:=nurk1+Pi/60;
until keypressed;
readln;
closegraph;
end.