蒙德卡罗算法随机数求面积还是挺好用的
发现半径不能取太大太小,太大会丢精度,太小会误差大…
高中学的数学还是挺管用的吧
#include<bits/stdc++.h>
using namespace std;
struct Point{
int x;
int y;
};
struct Circle{
Point p;//圆心坐标
int r;
};
double dis(Point a,Point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int main()
{
Point center={400,400};
Circle c={center,400};//圆心,半径 ,随机点 x,y [0,800]
srand(time(NULL));
long long cnt = 0;
long long total_point=1000000;
for(int i=0;i<total_point;i++)
{
Point temp;
temp.x=rand()%801;
temp.y=rand()%801;
if(dis(temp,center)<=400)
cnt++;
}
double area=1.0*cnt/total_point*800*800;//点数/总点数求出圆占的长方形比例,乘以总面积得到圆面积
//area=pi*r*r;
double pi=1.0*area/400/400;
cout<<pi;
return 0;
}