凸多边形:
(Convex Polygon)可以有以下三种定义:
1、没有任何一个内角是优角(Reflexive Angle)的多边形。
2、如果把一个多边形的所有边中,有一条边向两方无限延长成为一直线时,其他
3、凸多边形是一个内部为凸集的简单多边形。简单多边形的下列性质与其凸性等
(1)所有内角小于等于180度。
(2)任意两个顶点间的线段位于多边形的内部或
(3)多边形内任意两个点,其连线全部在多边形内部或边上。
4、一个多边形,如果它的任意两个点的连线都不包括该多边形以外的点,就称为凸多边形。
5、角度法:

判断每个顶点所对应的内角是否小于180度,如果小于180度,则是凸的,如果大于180度,则是凹多边形。

6、凸包法:

这种方法首先计算这个多边形的凸包,关于凸包的定义在此不再赘述,首先可以肯定的是凸包肯定是一个凸多边形。如果计算出来的凸多边形和原始多边形的点数一样多,那就说明此多边形时凸多边形,否则就是凹多边形。

凸包详解:https://blog.csdn.net/u013377068/article/details/80095620

7、顶点凹凸性法

利用以当前顶点为中心的矢量叉乘或者计算三角形的有符号面积判断多边形的方向以及当前顶点的凹凸性。

假设当前连续的三个顶点分别是P1,P2,P3。计算向量(P1,P2),(P1,P3)的叉乘,也就是计算三角形P1P2P3的面积,得到的结果如果大于0,则表示P2点在线段P1和P3的右侧,多边形的顶点是逆时针序列。然后依次计算下一个前后所组成向量的叉乘,如果在计算时,出现负值,则此多边形时凹多边形,如果所有顶点计算完毕,其结果都是大于0,则多边形时凸多边形。

8、辛普森面积法

利用待判别的顶点以及前后两个顶点所组成的三角形,利用辛普森公式计算其面积,如果此三角形面积与整个多边形面积符号相同,那么这个顶点是凸的;如果此三角形面积与整个多边形面积符号不同,那么这个顶点是凹的,即整个多边形也是凹多边形。


所有的正多边形都是凸多边形。
所有的三角形都是凸多边形。
凸多边形的内角均小于或等于180°,边数为n(n属于Z且n大于2)的凸多
n-2)×180°,但任意凸多边形外角和均为360°,并可通过反证法
3个。
凸多边形所有对角线都在内部,边数为n的凸多边形对角线条数为2-1n(n-3),
n-3个顶点连对角线。
凸包寻找算法
凸多边形:一个多边形,如果它的任意两个点的连线都不包括该多边形以外的点,就称为凸多边形。
一个平面点集S的凸包是指包含s的最小凸多边形,该多边形的顶点称为s的极点。
寻找一个平面点集的凸包是计算几何的基本问题,同时在图像处理和统计学中也有应用。
寻找凸包的原理:
假定在S的凸包内部取一个点X,然后从X向下画一条垂直线,也跳垂直线与X和S的第i个点的连线之间
有一个逆时针夹角,称为极角,然后按照极角非递减次序来排列S的点,对于极小相同的点,按照他们
与X的距离从小到大来排列。
从X向下的垂线沿逆时针扫描,按照极角的次序会依次遇到S的极点。如果u,v,w是三个按逆时针排列
的三个连续的极点,那么如果从u到v和从w到v两条连线之间的逆时针夹角大于180度。如果两条连线
之间的夹角小于180度,则第二个点不是极点。
一般选取y最小的点,多个y最小的话,选取其中x最小的点,作为p0,选取好p0后就可以开始选取X了
X不要求是S中的点,是任意的点,一般选在S的中心保证p0是第一个点。
伪代码:
步骤一【处理退化情况】
如果S的点少于3个,则返回S
如果S的所有点都在一条直线上,即共线,则计算并返回包含S所有点的最短直线的两个端点。
步骤二:【按极角排序】
在S的凸包内找到一个点X
按照极角递增次序来排列S的点,对于极角相同的点,按照它们与X的距离从小到大来排列创建一个
以S的点为元素,按照上述顺序排列的双向循环链表
另right指向后继,left指向前驱。
步骤三:【删除非极点的点】
另p是y坐标最小的点(也可以是x坐标最大的)

for(x=p,rx=x右边的下一个点;p!=rx){rrx=rx右边的点;if(x,rx,和rrx的逆时针夹角小于或等于180度){从链表中删除rx;rx=x;x=rx左边的点;}else{x=rx;rx=rrx;}}

————————————————

凹多边形:
(Concave Polygon)可以有以下三种定义方式:
1、至少有一个优角(Reflexive Angle)的多边形。(例如下图中,∠CDE>180°)
2、把一个各边不自交的多边形任意一边向两方无限延长成为一直线,如果多边形
其他各边不在此直线的同旁(如下图左),那么这个多边形就叫做凹多边形。
3、凹多边形的是一个内部为非凸集的简单多边形.简单多边形的下列性质与其凸性等价。
(1)一个内角大于180度。
(2)存在两个顶点间的线段位于多边形的外部。
(3)多边形内存在两个点,其连线不全部在多边形内部。

示例:

五角星、四角星、八角星、六角形等都是凹多边形:例如,正六角星中,有一个240°
的角。

性质:

1、平面上,不可能存在凹三角形。
2、凹多边形的内角和的解,应该通过(n-2)180°来计算。实际上是把大于平角
使得任意一个凹N多边形,都可分画为N-2个三角形,因此凹多边形的内角和也适用于(N-2)180°这个公式。不可以沿着一条边的延长线切割凹多边形。
3、平面上,凹多边形与边数相同的凸多边形的内角和相等。

凹多边形内角和的计算方法: 任意一个凸 (或凹) N 多边形 ,都可分画为 N-2 个三角形 ,
因此凹多边形的内角和 ,也适用( N-2 ) 180° 这个公式
凹多边形的外角和是: 360+ 大于 180 度的内角的个数 *180

原文链接:https://blog.csdn.net/Du_Shuang/article/details/81083662

凸多边形、凹多边形、凸包算法相关推荐

  1. 求多边形凸包(线性算法)--陈氏凸包算法--

    http://blog.sina.com.cn/s/blog_616e189f0100qc0u.html 陈氏凸包算法-算法参考:Computing the convex hull of a simp ...

  2. Easy3DCGAL 凸包算法(三维)

    文章目录 一.简介 二.实现代码 三.实现效果 参考资料 一.简介 在计算机图形学中,凸包是指在任意维空间中包含某一有限点集P的最小凸集,它由凸包顶点构成,在二维上其表现形式为一个凸多边形,而在三维上 ...

  3. java 地理围栏实现_使用Path2D和凸包算法实现地理围栏服务

    前言 地理围栏(Geo-fencing)是LBS的一种新应用,就是用一个虚拟的栅栏围出一个虚拟地理边界.在物流配送行业应用比较广,划分每个配送网点或者商家配送的范围,提高配送员的配送效率和服务的范围. ...

  4. matlab 凸包质心算法,求多边形凸包(线性算法)--陈氏凸包算法--Computing the convex hull of a simple polygon(源码)...

    陈氏凸包算法-算法参考:Computing the convex hull of a simple polygon 作者:Chern-Lin Chen 陈氏算法提供了一个线性效率求凸包的算法,本文使用 ...

  5. c语言凸包算法,基于C语言的凸包算法实现

    基于C语言的凸包算法实现 非计算机专业,代码有些的不好的地方,大佬轻喷^ _ ^ 根据要求,需要使用C语言实现凸包算法--Graham扫描法,本文将从算法理解.实现思路.遇到的问题及其解决方案三个方面 ...

  6. Graham Scan凸包算法

    获得凸包的算法可以算是计算几何中最基础的算法之一了.寻找凸包的算法有很多种,Graham Scan算法是一种十分简单高效的二维凸包算法,能够在O(nlogn)的时间内找到凸包. 首先介绍一下二维向量的 ...

  7. 点集凸包算法python实现(二)

    算法逻辑 在点集凸包算法python实现这篇博客中介绍了一种凸包算法,这种算法中凸包点搜索的过程较为麻烦,主要是因为计算点集连线与X轴的夹角需要考虑到四个不同象限,在这里通过计算向量夹角的方式,对凸包 ...

  8. 凸包算法Graham扫描法

    凸包算法(Graham扫描法) 转载自 SZUhg https://www.cnblogs.com/wpbing/p/9456240.html 叉乘与线段相交 判断一个点是否在一条线段的左边还是右边, ...

  9. LeetCode 587. 安装栅栏【凸包算法】【C++】【很多坑】

    凸包算法不难理解,写代码的时候主要是几何上的判定条件很容易写错. 算法的总体思想是: 1.给所有的点排序,找出极点(纵坐标最小的点,如果纵坐标一样,取横坐标最小的点) 2.除了极点之外,所有其他的点排 ...

  10. java 凸包算法_Melkman凸包算法的Java实现

    public class Point{ private float x; //X坐标 private float y; //Y坐标 private double arCos;//与P0点的角度 pub ...

最新文章

  1. JS学习笔记(一)DOM事件和监听
  2. 查看终端进程是否死掉技巧
  3. 云计算将使IT人失业?惠普推云计算裁员九千!程序员如何面对即将到来的产业大调整?...
  4. 好想学python 怎么猜人物_想自学Python,如何才能坚持下来?
  5. LAMP(7限定某个目录禁止解析php、 限制user_agent、 PHP相关配置、PHP扩展模块
  6. 银河麒麟V10入选2020中国十大科技新闻
  7. MATLAB中median函数的用法
  8. 小程序入门学习11--云开发04
  9. 怎么从服务器传输信息,大神们socket如何连接到服务器并判断从服务器传送回来的数据 谢谢谢谢 跪求啊 急用...
  10. CloudCompare:汉化
  11. mtk驱动sensor移植
  12. 艾永亮:2平米的Manner如何战胜200平米的星巴克
  13. 点云统一法线方向(未知视点)
  14. #10064 「一本通 3.1 例 1」黑暗城堡(spfa+乘法原理)
  15. Android Studio运行app启动模拟器一直卡在“Wating for target device to come online”的解决办法
  16. python用来占位的关键字_python-study/Readme.md at master · wchhuangya/python-study · GitHub
  17. 20220607跌破建议零售价,GPU市场正全面走向供过于求...
  18. SyntaxError (语法错误)
  19. EOS合约账户名称及作用
  20. 近百本精品图书全部免费赠送——仅面向学生

热门文章

  1. 和谐Froala editor编辑器
  2. linux shell 中的idd,shell脚本入门教程.pdf
  3. ctfshow 8神PNG隐写入门(土)赛 WP
  4. verilog语法进阶
  5. 摄动法在计算机中的应用,H理论在计算机控制系统摄动模型中的应用研究
  6. 转载:微信抢红包算法
  7. 自制hdmi线一头改vga图_VGA连接线接口定义及引线焊接教程,VGA线不够长时可用网线代替?...
  8. 华为USB线刷工具的使用
  9. python实现定时自动发送qq消息
  10. 无线局域网中RADIUS协议原理与实现