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.