| Precedente | Altri Applet | Successivo |
Si può stimare l'area del cerchio ricoprendolo di quadrati e calcolando le aree delle figure composte rispettivamente dai quadrati completamente interni al cerchio e quelli la cui intersezione con il cerchio non sia vuota.Questo applet permette di fare degli esperimenti variando la dimensione dei quadrati.
|
|
Istruzioni: Nel campo in basso a sinistra si può inserire un numero che rappresenta la dimensione in pixel dei quadrati che ricoprono il cerchio. Più piccolo è questo numero e migliore sarà la stima dell'area. In basso a destra si leggono le due stime dell'area del cerchio, rispettivamente:
Le aree sono normalizzate in modo tale che l'area vera del cerchio sia pigreco. |
| Codice sorgente: area.java |
|---|
import java.applet.Applet;
import java.awt.*;
import java.awt.image.ColorModel;
import java.awt.image.MemoryImageSource;
import java.lang.InterruptedException;
public class area extends Applet {
AreaControls controls;
AreaCanvas canvas;
public void init() {
setLayout(new BorderLayout());
controls = new AreaControls();
add("South", controls);
add("Center", canvas = new AreaCanvas(controls));
}
public boolean action(Event ev, Object arg) {
canvas.repaint();
return true;
}
}
class AreaCanvas extends Canvas {
AreaControls control;
AreaCanvas(AreaControls control) {
this.control = control;
}
public void paint(Graphics g) {
Color grey = new Color(100,100,100);
int len = Integer.parseInt(control.n_fld.getText());
if(len<2)len=2;
int w = size().width;
int h = size().height;
int cx = w/2;
int cy = h/2;
double radius = 0.8*(cx>cy?cy:cx);
double radius2 = radius*radius;
// area di un quadretto in unità di r^2
double qarea = len*len/radius2;
double isum =0, esum = 0;
// disegno i quadrati
int x,y;
for(x=0;x<cx;x+=len)
for(y=0;y<cy;y+=len)
{
int x1 = x+len-1;
int y1 = y+len-1;
boolean inside = (x1*x1+y1*y1<radius2);
boolean outside = (x*x+y*y>=radius2);
if(!outside)
{
if(inside) {
g.setColor(Color.yellow);
isum+=4*qarea;esum+=4*qarea;
} else {
g.setColor(grey);esum+=4*qarea;
}
g.fillRect(cx+x,cy+y,len,len);
g.fillRect(cx-len-x,cy+y,len,len);
g.fillRect(cx+x,cy-len-y,len,len);
g.fillRect(cx-len-x,cy-len-y,len,len);
}
}
// disegno la griglia
g.setColor(Color.black);
for(x=cx;x<w;x+=len) g.drawLine(x,0,x,h-1);
for(x=cx-len;x>=0;x-=len) g.drawLine(x,0,x,h-1);
for(y=cy;y<h;y+=len) g.drawLine(0,y,w-1,y);
for(y=cy-len;y>=0;y-=len) g.drawLine(0,y,w-1,y);
// disegno il cerchio
int d = (int)(radius);
g.setColor(Color.red);
g.drawOval(cx-d,cy-d,2*d,2*d);
control.area1_lab.setText(Double.toString(isum));
control.area3_lab.setText(Double.toString(esum));
}
}
class AreaControls extends Panel {
public TextField n_fld;
public Label area1_lab, area2_lab, area3_lab;
public AreaControls() {
setLayout(new FlowLayout());
add(new Label("lato:"));
add(n_fld = new TextField("100", 4));
add(new Label("pixel "));
add(area1_lab = new Label(" "));
add(area2_lab = new Label(" < area < "));
add(area3_lab = new Label(" "));
}
}
|
| Precedente | Altri Applet | Successivo |