根据百度百科的讲解:

凸多边形

现在重点讲解顶点凹凸性法(最常用也是较为简单的方法):计算总结在最后。

利用向量叉乘的相关知识进行计算:假设当前连续的三个顶点分别是P1,P2,P3。计算向量P1P3,P1P2的叉乘,也可以计算三角形P1P2P3的面积,得到的结果如果大于0,则表示P2点在线段P1和P3的右侧,此时P2对应的角度小于180。然后依次计算下一个前后所组成向量的叉乘,如果在计算时,出现负值,则此多边形时凹多边形,如果所有顶点计算完毕,其结果都是大于0,则多边形时凸多边形。

(1)先要知道三角形面积正负的判断

如上图,三角形ABC和三角形ABD。

三角形ABC用叉乘来计算的话,是正的。

三角形ABD用叉乘来计算的话,是负的。

(2)关于向量叉乘的坐标运算:

如果是在二维直角坐标的时候,相当于u3=0,v3=0

也就是

所以关于叉乘最后的结果,如果是正的,说明对应的三角形面积为“正”,也就是对应的为凸的。如果为“负”,也就是为凹的。

(3)叉乘的正负和多边形的凹凸性关系

把多边形找出固定一个点为P1,然后按给的点顺序设为P2和P3。也就是P1是固定的点,但是P2和P3对应会变的

P1P3=(x3-x1,y3-y1)和P1P2=(x2-x1,y2-y1),计算这两个向量的叉乘。

因为是考虑P2在P1P3的左右侧,所以是P1P3先,然后是P1P2

也就是

记忆:xy-yx,然后数字就是反过来,本来下标是1312,所以反过来就是2131 2131

这样子计算,如果是正的,说明P2在P1P3的右边,角度小于180,也就是凸的。

如果是负的,说明P2在P1P3的左边,角度会大于180,那就是凹的。

(4)判断凹凸多边形

如果全部都是凸的,就是凸多边形;如果出现一个是凹的,那就是凹多边形。

(5)计算多边形面积:和凹凸性有关

利用多边形可以定一个点,比如第一个点,然后和剩下的n-1个点组成n-2个三角形,那么这个多边形的面积就是n-2个三角形的面积之和,而三角形的面积可以利用向量叉乘的一半来表示

那么此时的疑问,向量叉乘是有正负的,那么这个正负有什么印象呢?当三角形的面积为正,表示这部分是凸出去的,因为是正的,那么是加到多边形面积的一部分。若三角形的面积为负,表示这部分是凹进来的,那么相当于这部分的面积是需要少掉的,所以时需要从多表现面积中去掉的一部分。

所以假如所有的点有n个点,用x[0]-x[n-1]和y[0]-y[n-1]表示,那么定一个点,如第一个点x[0],y[0],然后比如这个点为P1,然后下面就是P1P3和P1P2进行向量叉乘,也就是xy-yx,2131 2131:

(x2-x1)*(y3-y1)-(y2-y1)*(x3-x1),而x1,y1其实就是x[0],y[0]。而x2,y2是x[i],y[i]。x3,y3就是x[i+1],y[i+1]。

那么就是:((x[i]-x[0])*(y[i+1]-y[0])-(y[i]-y[0])*(x[i+1]-x[0]))/2.0;为面积,如果是凸为正,若是凹为负,就是相加起来。

其中 i 从1到n-2,这样子 i+1 就对应2到n-1,也就全部的点

(6)例子

上面的是,一个凸多边形,我们认为固定O为P1,然后按顺序给P2、P3。根据(1)中可以知道,计算出来的所有三角形面积都是正的,因此面积是所有三角形面积之和,同时面积都是+的,说明都是凸点。

上面的是,一个凹多边形,其中A为凹点。

总共有可以分为三个三角形,多边形面积 = 三角形OAB + 三角形OBC + 三角形OCD

其中三角形OAB是 负 的,但是三角形OBC是 正 的,刚好抵消后,就是多边形OABC的面积。

因此所有多边形的面积,都是分成了多个三角形的面积之和。(只是由于三角形的面积有正有负—对应凸和凹)

要点:

  • 使用三个点的向量叉乘,是P1,P2,P3,组成两个向量:P1P3和P1P2,以第一个点为起点P1,然后按顺序设P2和P3因为是以P1P3为边界考虑P2在哪侧,      顺序取点,值得是对所有点,固定了一个点之后,剩下的点,按逆时针取

所以是P1P3×P1P2,是计算这两个向量叉乘。

  • 还有关于向量叉乘的公式,可以推导。也可以记忆,因为是P1P3×P1P2,一定是xy-yx,接着就是反过来,

所以是:2131 2131

  • 然后计算结果为正,表示为凸;计算结果为负,表示为凹。只要有凹一定是凹多边形,要全部都是凸才是凸多边形

判断多边形的凹凸性和计算多边形面积:利用向量叉乘相关推荐

  1. 多边形凹凸性的判断、自相交判断

    文章目录 说明 分析 代码 关于自相交的理解 看图说话 说明 该博文参考 弱花3kou 的文章 [OpenGL] 绘制并且判断凹凸多边形.自相交多边形 分析 凸多边形 凹多边形 自相交 代码 #inc ...

  2. 【算法】推步聚顶 计算多边形的面积

    计算多边形的面积 "数性至朴,算学是天下最诚实的东西,一加一永远是二,五乘四永远是二十,而十二自实永远是一百四十四." 这世上,人心比算学更复杂.人际关系让人疲惫,还是数学比较单纯 ...

  3. 人工智能数学基础:利用导数判断函数单调性、凹凸性、极值、最值和描绘函数图形

    一.单调性判断定理 定理: 设函数y=f(x)在[a,b]上连续,在(a,b)内可导. (1)如果在(a,b)内f(x)≥0,且等号仅在有限多个点处成立,那么函数y=f(x)在[a,b]上单调增加; ...

  4. Pipe HDU - 2150(判断线段相交+向量叉乘线代详解)

    题目: 经过激烈的争夺,Lele终于把那块地从Yueyue的手里抢了回来.接下来,Lele要开始建造他的灌溉系统. 通过咨询Lele的好友--化学系的TT,Lele决定在田里挖出N条沟渠,每条沟渠输送 ...

  5. 【转载】判断两条线段是否相交——(向量叉乘)

    原文:https://www.cnblogs.com/tuyang1129/p/9390376.html 实现:https://blog.csdn.net/yegshun/article/detail ...

  6. python计算多边形面积_Python求凸包及多边形面积教程

    一般有两种算法来计算平面上给定n个点的凸包:Graham扫描法(Graham's scan),时间复杂度为O(nlgn):Jarvis步进法(Jarvis march),时间复杂度为O(nh),其中h ...

  7. python计算多边形的面积并保留两位小数_Python计算任意多边形面积算法

    多边形面积求解的方法很多,其中比较多见的就是增加一个点P,然后分别连接多边形各个定点与P点,然后计算每个三角形的符号面积(面积有正负之分),求和就可以计算出面积. 鉴于上面的方法,我们也可以用另外一种 ...

  8. 通过坐标点位,计算多边形面积

    多边形面积 本文使用三角形面积累计法计算多边形面积,就是将多边形按照一个顶点,分割成多个三角形,计算三角形的面积,累加,得到多边形的面积. 当然,这个算法也有一些缺点,当这个多边形比较奇怪的时候,不能 ...

  9. 七巧板复原之剩余区域的计算-多边形的加减法计算

    按:这个区域就是之前小文提到的空腔,后来笔者经过抽象,发现其实这是个多边形加减法的问题(不知道计算机图形学里有没有专门的叫法) 多边形的减法 如图示 图中G1是已经放好的部分,Part是刚刚摆放好的部 ...

最新文章

  1. 抓取网页的脚本 【修复】
  2. sql server模糊查询、分组
  3. Flume-ng 高可用搭建-与测试
  4. Eclipse+Pydev环境搭建
  5. Android8.0及以上系统 WiFi热点 版本适配
  6. vsto mysql_16-Python MySQL
  7. 为什么从网页上打印怎们好像被缩放_便捷高效低成本,映美热敏云打印机CTP-180UWE体验...
  8. Coinbase 现“市场核弹级”漏洞,颁发25万美元奖励
  9. 工业大数据分析应用在哪方面
  10. 七、【应用的主要框架】
  11. python输入一个字符串、计算其中小写字符的个数_编写程序,输入一个字符串,统计其中大小写字母数字和其他符号的个数并输出,要求统计过程在函数COUNT中进行...
  12. Android 数字动画
  13. wpf silverlight的Behavior
  14. Dynamics AX2012 从第一个字符串开始截取内容
  15. VIEW: X$KSMLRU - LRU flushes from the shared pool - (7.3 - 8.1) [ID 43600.1]
  16. 联想笔记本e43l_联想昭阳e43l
  17. ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  18. vue+spring boot项目实现PC端微信登录
  19. 抖音壁纸小程序v1.0.2版本功能,新增达人入住功能
  20. 如何让爆满的C盘腾出 10G空间

热门文章

  1. 一些面经(1)---计算机网络、操作系统、测试
  2. 全栈AI火力全开,“云智一体”为开发者凿开产业智能通衢
  3. 西南大学统考英语计算机有答案吗,西南大学666教育学 初试398分经验贴(含统考科目英语政治.......
  4. Xshell安装和使用教程——小白必看
  5. 【pandas之数据清洗和处理和空值处理】
  6. JavaScript实现拖动图片到指定位置验证码
  7. 【内联函数】inline关键字的作用与内联函数的特性
  8. 程序员必须知道的9大数据挖掘工具
  9. LSTM -长短期记忆网络(RNN循环神经网络)
  10. 网站群发站内信数据库表设计