圆周率(二)

#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

posted @ 2022-09-03 17:30  计算机知识杂谈  阅读(70)  评论(0编辑  收藏  举报