方格计数

博客提出在二维平面以小方格顶点为圆心、半径为1000画圆,计算圆内完整小方格数量的问题。解题思路是将圆心设为原点,先算第一象限,通过判断小方格右上角坐标到原点距离与半径关系确定是否在圆内,最后结果乘以4。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在二维平面上有无数个1x1的小方格。
我们以某个小方格的一个顶点为圆心画一个半径为1000的圆。
你能计算出这个圆里有多少个完整的小方格吗?
在这里插入图片描述

public static void main(String[] args) {
	// TODO Auto-generated method stub
	int r=1000;
	int sum=0;
	for(int x=1;x<r;x++) {
		for(int y=1;y<r;y++) {
			if((x*x+y*y)<=(r*r)) {
				sum+=1;
			}
		}
	}
	System.out.println(sum*4);
}

解题思路是先将圆心看为原点,然后计算第一象限,把圆内小方格的右上角的坐标都计算一遍,当该座标到原点的距离小于等于圆的半径时则该小方格在圆内,但是要注意的时x,y坐标不能为0,x,y的取值范围应该是1到r,最后计算完成后乘以4就是最后的个数(因为刚开始只计算了第一象限)。

  • Math.sqrt(x) ,将某个数开平方(本题并没有涉及到该知识点,只是简单的补充)
我先给你一个城市的三维建模%% 绘制障碍建筑物,并将障碍物位置保存至三维数组field中 n=20; %三维地图的边长 field=ones(n,n,n); %地图上的0-n,按方格计数,一共n*n个方格 field(:)=1; % stem3(field,'--.y'); field_x = 0:n:n; field_y = 0:n:n; field_z = 0:n:n; stem3(field_x,field_y,field_z,'--.y'); hold on; i=11; %要创建n个面积为1的障碍建筑物 % x,y,z想要改成随机可将数组成员改成rand*20 x=1:1:i; x=[2 4 3 5 7 10 13 14 16 9 8]; %创建建筑的x轴坐标分别为x-x+1; y=1:1:i; y=[4 17 14 3 11 13 8 16 6 8 18];%创建建筑的y轴坐标分别为y-y+1; z=1:1:i; z=[5 7 7 12 6 11 4 18 3 15 6];%创建建筑的高度分别为z; for a=1:i % 创建第a个面积为1的建筑,将[x(a),y(a)]右上角的方块设为障碍物 x1=x(a):0.01:x(a)+1; y1=y(a)+0.99:0.0001:y(a)+1; z1=z(a)-0.01:0.0001:z(a); stem3(x1,y1,z1,'.k'); x2=x(a)+0.99:0.0001:x(a)+1; y2=y(a):0.01:y(a)+1; z2=z(a)-0.01:0.0001:z(a); stem3(x2,y2,z2,'.k'); x3=x(a):0.0001:x(a)+0.01; y3=y(a):0.01:y(a)+1; z3=z(a)-0.01:0.0001:z(a); stem3(x3,y3,z3,'.k'); x4=x(a):0.01:x(a)+1; y4=y(a):0.0001:y(a)+0.01; z4=z(a)-0.01:0.0001:z(a); stem3(x4,y4,z4,'.k'); for c=1:z(a) field(x(a)+1,y(a)+1,c)=inf; end end j=9; %要创建n个面积为1的障碍建筑物 x=1:1:j; x=[14 17 11 3 6 10 17 7 0]; %创建建筑的x轴坐标分别为x-x+2; y=1:1:j; y=[8 11 2 6 4 16 7 12 1];%创建建筑的y轴坐标分别为y-y+2; z=1:1:j; z=[2 9 13 11 4 18 5 7 6];%创建建筑的高度分别为z; for b=1:j % 创建第m个面积为4的建筑 x1=x(b):0.01:x(b)+2; y1=y(b)+2:0.0001:y(b)+2.02; z1=z(b)-0.02:0.0001:z(b); stem3(x1,y1,z1,'.b'); x2=x(b):0.0001:x(b)+0.02; y2=y(b):0.01:y(b)+2; z2=z(b)-0.02:0.0001:z(b); stem3(x2,y2,z2,'.b'); x3=x(b)+2:0.0001:x(b)+2.02; y3=y(b):0.01:y(b)+2; z3=z(b)-0.02:0.0001:z(b); stem3(x3,y3,z3,'.b'); x4=x(b):0.01:x(b)+2; y4=y(b):0.0001:y(b)+0.02; z4=z(b)-0.02:0.0001:z(b); stem3(x4,y4,z4,'.b'); for d=1:z(b) field(x(b)+1,y(b)+1,d)=inf; field(x(b)+2,y(b)+1,d)=inf; field(x(b)+1,y(b)+2,d)=inf; field(x(b)+2,y(b)+2,d)=inf; end end % field(ind2sub([n n n],ceil(n^3.*rand(n*n*n*wallpercent,1)))) = Inf;%向上取整
最新发布
05-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值