Poligoni regolari

Il seguente esercizio può essere risolto facilmente usando i poligoni e le operazioni trigonometriche. In particolare, ci occorre il valore di Pi greco, che è rappresentato dalla variabile Math.PI, e le funzioni seno e coseno, che sono realizzate in Java come Math.sin e Math.cos.

Quello che si vuole fare è disegnare un poligono regolare con n lati.

L'esercizio si risolve tenendo presente che ogni poligono regolare si può sempre inscrivere in un cerchio. Il problema si sposta quindi dal disegno del poligono alla individuazione di n punti sulla circonferenza. Il medodo che usiamo è questo: l'angolo giro vale 2*Math.PI, e questo va diviso esattamente in n parti. Quindi, possiamo fare un ciclo, in cui una variabile i va da 0 a n. L'angolo che consideriamo ogni volta vale 2*Math.PI*i/n.

Una volta noto l'angolo corrispondente ai punti della circonferenza che ci servono, occorre calcolare le loro coordinate. Se per esempio assumiamo che il centro del cerchio sia posizionato in (xcentro,ycentro), e che il suo raggio sia memorizzato nella variabile raggio, allora le coordinate di un punto si ottengono usando le note formule trigonometriche:

      x=xcentro+raggio*Math.cos(2*Math.PI*i/n);
      y=ycentro+raggio*Math.sin(2*Math.PI*i/n);
Una volta note le coordinate di un punto, è sufficiente aggiungere il punto al poligono che è stato inizialmente dichiarato vuoto. Il programma completo Regolari.java viene riportato qui sotto.

/*
  Disegna un poligono regolare con n lati
*/

import java.awt.*;

public class Regolari extends java.applet.Applet {
  public void paint(Graphics g) {
    int n=8;
    Polygon reg=new Polygon();
    int i;
    double x,y;
    double xcentro=100, ycentro=100, raggio=100;

    for(i=0; i<=n-1; i=i+1) {
      x=xcentro+raggio*Math.cos(2*Math.PI*i/n);
      y=ycentro+raggio*Math.sin(2*Math.PI*i/n);

      reg.addPoint( Math.round((float) x), Math.round((float) y) );
    }

    g.drawPolygon(reg);
  }
}

L'esecuzione di questo programma, in cui il centro è stato posto in (100,100), il raggio è 100, ed n vale 8, produce il disegno seguente: