| Precedente | Altri Applet | Successivo |
Si può stimare la lunghezza della circonferenza tracciando due poligoni regolari, uno inscritto
e uno circoscritto e calcolando i due perimetri.
|
|
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(" "));
}
}
|
| Precedente | Altri Applet | Successivo |