zoukankan      html  css  js  c++  java
  • 初学计算几何(三)——多边形的简单操作

    前言

    去学习了一下一些多边形相关的简单操作。

    多边形

    下面是一个多边形的基本定义:

    struct Polygon//一个结构体用来存储一个多边形
    {
        int n;Point p[10005];//n存储点数,P数组存储点
        Polygon() {n=0;}//构造函数
    };
    

    精度控制

    在多边形问题中,我们需要好好控制精度:

    #define eps 1e-10//设置eps减小精度误差
    inline int dcmp(double x) {return fabs(x)<eps?0:(x>0?1:-1);}//判断正负
    

    判断一个点是否在多边形内部

    我们可以以该点向外引一条射线,如果与多边形边界相交奇数次,就说明该点在多边形内,否则就在多边形外。

    特殊地,如果该点在多边形边上,我们可以返回(-1)

    代码如下:

    inline int IsInPolygon(Point A,Polygon P)//判断一个点是否在多边形内部
    {
    	register int i,flag=0,k,d1,d2;
    	for(i=1;i<=P.n;++i)//枚举边
    	{
        	if(!dcmp(PToS(A,Segment(P.p[i],P.p[i%P.n+1])))) return -1;//如果点在边上,返回-1
        	k=dcmp(Cro(P.p[i%P.n+1]-P.p[i],A-P.p[i])),d1=dcmp(P.p[i].y-A.y),d2=dcmp(P.p[i%P.n+1].y-A.y),
        	k>0&&d1<=0&&d2>0&&++flag,k<0&&d1>0&&d2<=0&&--flag;//更新flag
    	}
    	return flag?1:0;//flag>0表示在多边形内部,否则说明在多边形外部
    }
    

    求多边形面积

    求多边形面积,我们可以选一个点作为端点,然后枚举与它不相临的边,计算出该点与这些边所构成的三角形的面积和即可。

    代码如下:

    inline double PolygonArea(Polygon P)//求多边形面积
    {
    	register int i;register double res=0;//res统计和
    	for(i=2;i<P.n;++i) res+=Cro(P.p[i]-P.p[1],P.p[i+1]-P.p[1])/2;//计算由1号节点,i号节点,i+1号节点构成的三角形面积
    	return res;//返回答案
    }
    

    后记

    关于多边形的内容貌似就这些?

    如果还有的话我会继续进行补充的。

  • 相关阅读:
    五分钟上手Markdown
    css中居中方法小结
    事务和同步锁
    插入排序
    插入排序
    交换排序
    eclipse 常用快捷键
    交换排序
    二叉搜索树(BST)
    二叉树遍历以及根据前序遍历序列反向生成二叉树
  • 原文地址:https://www.cnblogs.com/chenxiaoran666/p/Polygon.html
Copyright © 2011-2022 走看看