PrecedenteAltri AppletSuccessivo



Stima del perimetro

Si può stimare la lunghezza della circonferenza tracciando due poligoni regolari, uno inscritto e uno circoscritto e calcolando i due perimetri.

Questo browser non e' abilitato
a visualizzare applet

Istruzioni:

Nel campo in basso a sinistra si può inserire il numero di lati dei due poligoni.
In basso a destra viene riportata la stima della lunghezza della circonferenza limitata dal perimetro del poligono inscritto (disegnato in nero) e circoscritto (in blu).
L'unità di misura è scelta in modo che la lunghezza della circonferenza sia pari a 2 pigreco.


Codice sorgente: perimetro.java
import java.applet.Applet;
import java.awt.*;
import java.awt.image.ColorModel;
import java.awt.image.MemoryImageSource;
import java.lang.InterruptedException;

public class perimetro extends Applet {

    PerimetroControls controls;
    PerimetroCanvas canvas;

    public void init() {
        setBackground(Color.white);
	setLayout(new BorderLayout());
	controls = new PerimetroControls();
	add("South", controls);
	add("Center", canvas = new PerimetroCanvas(controls));
    }

    public boolean action(Event ev, Object arg) {
          canvas.repaint();
	    return true;
    }
}

class PerimetroCanvas extends Canvas {

    int cx,cy;
    int radius;
    public int n = 4;
 
    double r1=1.0, r2=2.0, angRatio=2.0, maxAng=Math.PI*8;
    PerimetroControls control;

    PerimetroCanvas(PerimetroControls control) {
      this.control = control;
    }
  
    public void paint(Graphics g) {

      n = Integer.parseInt(control.n_fld.getText());
      if(n<4)n=4;

	int w = size().width;
	int h = size().height;
      cx = w/2;
      cy = h/2;
      if(cx>cy) radius=cy; else radius=cx;
      radius *= 0.8;

      int i;
      int x0=0,y0=0,x1=0,y1=0;
  
      // perimetro del poligono inscritto
      g.setColor(Color.black);
      for(i=0;i<=n;i++)
        {
         double ang = i*Math.PI*2.0/n;
         x1 = cx + (int)(radius*Math.cos(ang)+0.5);
         y1 = cy + (int)(radius*Math.sin(ang)+0.5);
         if(i>0)
           {
            g.drawLine(x0,y0,x1,y1);
           }
         x0=x1;
         y0=y1;
        }

      // perimetro del poligono circoscritto
      g.setColor(Color.blue);
      double rr = (double)radius/Math.cos(Math.PI/n);
      for(i=0;i<=n;i++)
        {
         double ang = (Math.PI+i*Math.PI*2.0)/n;
         x1 = cx + (int)(rr*Math.cos(ang)+0.5);
         y1 = cy + (int)(rr*Math.sin(ang)+0.5);
         if(i>0)
           {
            g.drawLine(x0,y0,x1,y1);
           }
         x0=x1;
         y0=y1;
        }


      g.setColor(Color.red);
      g.drawOval(cx-radius,cy-radius,2*radius,2*radius);

      double dang2 = Math.PI/n;

      float perim1 = (float)(n * 2 * Math.sin(dang2));
      float perim2 = (float)(n * 2 * Math.tan(dang2));

      control.area1_lab.setText(Float.toString(perim1));
      control.area3_lab.setText(Float.toString(perim2));
     }
}



class PerimetroControls extends Panel {
    public TextField n_fld;
    public Label area1_lab, area2_lab, area3_lab;
    public PerimetroControls() {
	setLayout(new FlowLayout());
	add(new Label("n"));
	add(n_fld        = new TextField("4", 4));
	add(new Label("   "));
	add(area1_lab = new Label("                     "));
	add(area2_lab = new Label(" < circonferenza < "));
	add(area3_lab = new Label("                     "));

    }
}

  





PrecedenteAltri AppletSuccessivo


Gian Marco Todesco