圆周率(二)
#include<bits/stdc++.h>
using namespace std;
const int N=1001;
struct Point{
int x,y;
};
Point change(Point p){
//将直角平面坐标系转化为数组坐标
p.x=abs(p.x+N/2);
p.y=abs(p.y-N/2);
return p;
}
int main(){
int r=N/2;
int s=0;
//画圆的过程
for(int i=-N/2;i<=N/2;i++){
for(int j=-N/2;j<=N/2;j++){
Point p=change((Point){i,j});
int x=p.x,y=p.y;
//printf("%d %d\n",x,y);
if(i*i+j*j<=r*r)s++;
}
}
printf("%.10lf",1.0*s/r/r);
return 0;
}
使用x2+y2<=r2的解析式,判断点是否在圆内,来计算圆的面积
这个方法准确的说不适合算圆周率,是用来判断其他东西的(
为了把数组下标(i,j)转化为直角坐标系中的(x,y),增添change()函数,自己手动推一下应该能明白
R=15时所绘制的圆图案:(由于Windows默认的控制台字体原因,8*16的点阵字体看上去像椭圆一样)
所输出的圆周率值:
3.1413960000