Section 3.4 Electric Fence

本文介绍了一种计算平面直角坐标系中多边形内部及边界上的整数点数量的方法。利用数学公式A=I+B/2-1进行计算,其中A为多边形内的整数点数,B为边界上的整数点数,I为多边形面积。通过上下取整函数确定边界上的整数点,并给出了一段C++实现代码。

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

/*
ID: niepeng1
PROG: fence9
LANG: C++
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
/*
天知道我的那个方法也是扫描直线,但是边界有一点问题,无语了,y了很多很多次。
其实我还是认为我的方法正确。可是它在第7个数据就y掉了。
其实是没有用up,down.而是统统用down,然后判断高的哪一个边是否有整数点,有的话
减一,求和。
为什么是错的呢,还没有弄明白?
方法二、
    任意多边形满足:A = I + B/2 - 1
    I为多边形面积,B为边界上整数点的个数。
    A为多边形内的整数点的个数。
    点(W,X)、(Y,Z)间的整数点的个数 1 + gcd(|Y - W|, |Z - X|).
*/
int up(double a)
{
 int a1=(int)(floor(a));
 if( (a-a1)>1e-6)
  a1++;
 return a1;
}
int down(double a)
{
 int a1=(int)ceil(a);
 if((a1-a)>1e-6)
  a1--;
 return a1;
}
int main()
{
 freopen("fence9.in","r",stdin);
 freopen("fence9.out","w",stdout);
 int m,n,p,total=0,tem;
 double k1,k2,i,j,j1;

 scanf("%d%d%d",&n,&m,&p);
 k1=(double)(n+0.0)/m;
 k2=(double)(n-p+0.0)/m;
 
 for(i=1;i<m;i++)
 {
  j=k2*i+p;
  j1=k1*i;
  tem = up(j)-down(j1)-1;
  total+=tem;
 }
 printf("%d/n",total);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值