Zagnieżdżenie wielokątów foremnych
Rezultat
Jest to aplet przedstawiający zagnieżdżające się w sobie wielokąty foremne. Można ustawiać w nim ilość zagęszczeń st i wielokąt jakim chcemy
operować a. W pracy użyta jest animacje, lecz nie bedę tłumaczył
jej działania, gdyż jest to dodatek niezwiązany z tematem.
Okrag o środku O jest opisany na wielokącie. Każdy kolejny kąt ∠AOB, ∠AOB, ∠AOB... itd. są sobie równe. Ich miarę określa wzór: 360º/(ilość wierzchołków)
Rysowanie figury foremnej polega na zrobieniu pętli mającej tyle powtórzeń co ilość wierzchołków tego wielokąta. Obliczanie położenia wierzchołków jest opisane wzorem (przykładowo):
B(x,y)=(r·cos(∠AOB),r·sin(∠AOB))
C(x,y)=(r·cos(∠AOC),r·sin(∠AOC))
void foremny(Graphics g,double r,double gi) { int i; pkt2d w=new pkt2d(0,0); w.war(r*Math.cos(gi),r*Math.sin(gi)); lo28.kursor(g,w); for(i=1;i<=ile;i++) { w.war(r*Math.cos(i*fi+gi),r*Math.sin(i*fi+gi)); lo28.kreska(g,w); lo28.kropka(g,w,Color.white); } }
Funkcja foremny() przedstawia pętle tworzącą wielokąt foremny. Zmienna i wyznacza, który wierzchołek liczymy, dlatego to wlaśnie ona zostala użyta jako rosnąca zmienna w tej pętli, ponieważ dzieki temu możemy poprowadzic miedzy punkami linie.
Zmienna r wyznacza w jaki okrąg będzie wpisana nasza figura, natomiast gi jest wartościa kąta o jaki przechyli się wielokąt.

Kolejną trudnością w tym aplecie, było znalezienie promienia nowego wielokąta foremnego.
Miarę nowego promienia x obliczę korzystając z twierdzenia sinusów, lecz zanim to zrobię, muszę obliczyć kąt leżący na przeciwko boku r (nazwijmy go β).
β= 180º-α-0.5·(180º-φ),
gdzie φ= 360º/(liczba wierzchołków)
Mając już wszystkie potrzebne dane, możemy skorzystać z tw. sinusów:
x=r·sin(0.5·(180º-φ))/sin(β)
W ten sposób otrzymujemy nowy promień.
void rekurencja(Graphics g,double r,double gi,int st) { double a; double alfa; if(st>0) { alfa=Math.PI-bi-0.5*(Math.PI-fi); a=(r*Math.sin((Math.PI-fi)/2))/Math.sin(alfa); foremny(kontekst,a,gi); rekurencja(kontekst,a,gi+bi,st-1); } }
Zadanie kończy krótka rekurencja, która zwiększa początkowy kąt gi o jego wartość bi (bi=gi na samym poczatku, bi stałe (nasza α)).