Wielokąt foremny

Wielokątem foremnym nazywamy wielokąt, w którym każde dwa boki są równe i każde dwa kąty są równe.

Przypomnijmy sobie, że wielokąt foremny można skonstruować cyrklem i linijką jedynie wtedy, gdy liczba jego boków to :

2k · p1 · p2 . . . pm,
gdzie liczby k i m to dowolne liczby naturalne, mnożone zaś liczby pi to różne liczby pierwsze postaci
2r + 1 gdzie r=2n
- dotychczas znamy tylko pięć takich liczb pierwszych: 3, 5, 17, 257, 65537 i wiemy, że ewentualne następne byłyby ogromnie ogromne. Wyjątkiem jest tu liczba 4. Oczywiście konstruowalne również są wielokąty, których liczba boków jest parzystą wielokrotnością w.w liczb.

W informatyce nie mamy takich dylematów, wszystkie konstrucje są oczywiście przybliżone.
Jeśli obliczymy kąt wielokąta foremnego :
φ=2· PI / n, wtedy wzory na współrzędne i-tego wierzchołka wielokąta foremnego są nastepujące :

[ r · cos( i· φ) , r · sin( i·φ )]
A oto procedury rysujące :

Pascal
Java
 Procedure Foremny(n :integer; r:real)
var xp,yp,xk,yk,kat  : real;
      i : integer
begin
   kat:=2*PI/n;
   for i:=0 to  n-1 do
       begin
           xp:=r*cos(i*kat);
           yp:=r*sin(i*kat);
           xk:=r*cos((i+1)*kat);
           yk:=r*sin((i+1)*kat);
           Linia(xp,yp,xk,yk); 
       end;
end;
 public void foremny(Graphics g,int ile)  
{ // zakladamy,ze srodek w (0,0)

 double kat,fi;
 Pkt p,k;
      kat=2*Math.PI/ile;          
      fi=0;
      do
        {                 
          p.x=r * Math.cos(fi+kat);
          p.y=r * Math.sin(fi+kat);
          k.x=r * Math.cos(fi+2*kat);
          k.y=r * Math.sin(fi+2*kat);
          linia(g,p,k);
          fi+=kat;
        }
       while ( fi<(2*Math.PI) );		  
}