Kujundi keeramiseks u"mber telje mingi nurga võrra tuleb kõik teda määravad
punktid keerata uude asukohta ning siis uute punktide abil joonistada
kujund. Ümber oma nullpunkti (punkti mille suhtes on keha tükkide
koordinaadid) saab kergesti keerata. Keerata tuleb nii nagu matemaatikas
punkti ristkoordinaadistikul nullpunkti suhtes:
uusx=vanax*cos(nurk)+vanay*sin(nurk)
uusy=-vanax*sin(nurk)+vanay*cos(nurk)
uses graph, crt;
type
punkt=record
x: integer;
y: integer;
end;
punktid= array[1..100] of punkt;
var p, p2 : punktid;
keskp: punkt;
arv: integer;
nurk: real;
procedure algus;
var d, m: integer;
begin
p[1].x:=0;
p[1].Y:=0;
p[2].x:=100;
p[2].Y:=0;
p[3].x:=0;
p[3].Y:=100;
arv:=3;
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(p: punktid; var p2: punktid; kogus: integer; x: real);
var i: integer;
begin
for i:=1 to kogus do begin
p2[i].x:=round(p[i].x*cos(x)+p[i].y*sin(x)); {round muudab täisarvuks}
p2[i].y:=round(-p[i].x*sin(x)+p[i].y*cos(x));
end;
end;
begin
algus;
nurk:=0;
while nurk<2*Pi do
begin
keera(p, p2, arv, nurk);
joonista(p2, keskp, arv);
nurk:=nurk+Pi/24;
delay(500);
end;
readln;
closegraph;
end.