求pi,向正方形中投点,大部分点一定落入最大圆中。落在圆内次数/总次数=圆的面积/正方形面积;
设置Point类,主要包含横纵坐标,以及两点之间距离
public class Point{
double x;
double y;
public Point(double x,double y){
this.x=x;
this.y=y;
}
public double getDistance(Point point){
double distance=Math.sqrt(Math.pow((this.x-point.x),2)+Math.pow((this.y-point.y),2));
return distance;
}
}
设置Circle类,主要包含半径和圆心,以及求圆心与点间的距离。
public class Circle{
double radius;
Point center;
public Circle(double radius,Point center){
this.radius=radius;
this.center=center;
}
public Boolean isPointInCircle(Point point){
double distance=this.center.getDistance(point);
return distance<=this.radius;
}
}
主方法创建两个实例对象,Point实例对象和Circle实例对象,生成随机点,随机点落入圆内,count++,利用公式算出pi的值。
import org.w3c.dom.ls.LSOutput;
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
// Point point1=new Point(1,1);
// Point point2=new Point(2,2);
// double dis=point1.getDistance(point2);
// System.out.println(dis);
//
//
// Circle circle=new Circle(1,point2);
// System.out.println(circle.isPointInCircle(point1));
Point center=new Point(1,1);
Circle circle=new Circle(1,center);
Random random=new Random();
int count=0;
Scanner scanner=new Scanner(System.in);
System.out.println("请输入要投入的点的个数:");
int n= scanner.nextInt();
for (int i=0;i<n;i++){
double x=random.nextDouble()*2;
double y=random.nextDouble()*2;
Point point=new Point(x,y);
if(circle.isPointInCircle(point)){
count++;
}
}
System.out.println(count*4.0/n);
}
}