- 浦丰投针法
1777 年法国科学家浦丰提出用随机投针法计算圆周率,见图 2.17 (a)。具体步骤为:①取
一张白纸,在上面画上许多条间距为 D 的平行线;②取一根长度为 L( L< D)的针,随机
地向画有平行直线的纸上掷 n 次,记录针与直线相交的次数,记为 m;③π= (2×针长÷线
距)× (试验次数÷相交次数)。若线距是针长的 2 倍,则π=试验次数÷相交次数。
import java.util.Random;
class TestPF {
double d,dd,width,high;
TestPF(){width=100;high=100;dd=1;d=0.5;}
double x,y,x1,y1,jd;
void PF(int n){
Random r=new Random();
int count=0;
for(int i=0;i<n;i++){
jd=r.nextInt(360)+r.nextDouble();
y=r.nextInt(99)+ r.nextDouble();
y1=y+d*Math.sin(jd);
if(Math.floor(y)!=Math.floor(y1)) count++;
}
System.out.println("投针"+n+"次,相交"+count+"次,PI="+n*1.0/count);
}
}
public class pai {
public static void main(String[] args) {
TestPF pf=new TestPF();
pf.PF(2122);pf.PF(1000000);
}
}
- 随机掷点法
随机掷点法也是计算圆周率的经典方法,见图 2.17(b),边长为 1 的正方形面积为
1,其中的扇形面积则为 π
4
。向正方形中随机掷 n 个点( n 足够大),假设有 m 个点位于圆中,
则可将 n 和 m 分别视为正方形面积和圆形面积。故:圆面积÷正方形面积= (π /4)÷ 1= m÷
n。容易得出:π= 4× m÷ n。
public class pai1 {
public static void main(String[] args) {
System.out.println(rand_pi(100000)); //改变参数值
}
public static double rand_pi(int n) {
int numInCircle = 0;
double x, y;
double pi;
for (int i = 0; i < n; i++) {
x = Math.random();
y = Math.random();
if (x * x + y * y < 1)
numInCircle++;
}
pi = (4.0 * numInCircle) / n;
return pi;
}
}