一、凹凸多边形定义

  因为凸多边形刚好定义,所以还是先看凸多边形的定义,凸多边形(Convex Polygon)可以有以下三种定义:

  1. 没有任何一个内角是优角(Reflexive Angle)的多边形。
  2. 如果把一个多边形的所有边中,有一条边向两方无限延长成为一直线时,其他各边都在此直线的同旁,那么这个多边形就叫做凸多边形。
  3. 凸多边形是一个内部为凸集的简单多边形。

  简单多边形的下列性质与其凸性等价:
  1、所有内角小于等于180度
  2、任意两个顶点间的线段位于多边形的内部或边上
  3、多边形内任意两个点,其连线全部在多边形内部或边上

  可以发现:

  • 所有的正多边形都是凸多边形
  • 所有的三角形都是凸多边形。

  不是凸多边形的,就是凹多边形,所以判断一个多边形的凹凸性,就判断其中一种就行。

二、凹凸性判断

  对于一个多边形,一定可以知道多边形所有的点在平面内的位置,有可能是有序的,有可能是无序的。

多边形的点有序

1. 连续叉乘法

  叉乘 可以用来判断两个向量在空间中的位置关系,在平面内的多边形,我们有它的有序点集,比如 A 1 A 2 A 3 . . . A n A_1A_2A_3...A_n A1​A2​A3​...An​,通过 A 1 A 2 ⃗ × A 2 A 3 ⃗ \vec{ A_1A_2 } \times \vec{ A_2A_3 } A1​A2​ ​×A2​A3​ ​,我们可以知道这三个点的走势,只需要记录叉乘的符号即可,接着继续算 A 2 A 3 ⃗ × A 3 A 4 ⃗ \vec{ A_2A_3 } \times \vec{ A_3A_4 } A2​A3​ ​×A3​A4​ ​,依次类推,只要有一次叉乘出来的结果符号和之前的不对,就是凹多边形,如果直到最后多是同样的符号,那么就是凸多边形

多边形的点无序

1. 凸包法

  一个凸多边形的点,是全部位于这个点集的凸包之上的,也就是说:如果一个多边形的点集计算出来的凸包点个数和这个多边形点个数一样多,那么它就是凸多边形,否则就是凹多边形。
  计算凸包有很多方法,具体可以查看计算凸包的博客:待填入。

判断一个多边形的凸凹性相关推荐

  1. 判断一个多边形是凸多边形还是凹多边形

    题目: 判断一个多边形是凸多边形还是凹多边形 输入: 输入包含多组测试数据,每组数据占2行,首先一行是一个整数n,表示多边形顶点的个数,然后一行是2×n个整数,表示逆时针顺序的n个顶点的坐标(xi,y ...

  2. 判断一个多边形是否是凸多边形

    一个很简单的问题看了好久,但就是提交不过,也看不出是哪出了问题 问题为:判断一个多边形是否是凸多边形 我的思路是这样的: 建立x[],y[]这两个数组用来存放坐标,计算两个向量,然后让计算它们的叉积, ...

  3. 如何判断一个多边形的环是逆时针还是顺时针

    OGC关于数据格式有规定,多边形的外环应为逆时针,内环应为顺时针.GIS相关的库包,在对数据进行空间操作的时候,也基于这个规定,将数据标准化为外环逆时针,内环顺时针之后,再进行空间计算和分析. 这种标 ...

  4. 【编程题】判断一个多边形是否为凸多边形

    题目: 顺序输入点的坐标,判断按这些点顺序连接起来的多边形是否为凸多边形还是凹多边形 输入描述: 输入包括两行: 第一行是一个整数n,n>=3,作为提示输入的顶点数量 第二行为2*n个整数,为各 ...

  5. HDU1756(判断一个点是否在多边形内)

    以下内容是在自己学习中总结出来了的,如果有什么错误,请指出,谢谢! 判断一个点是否在多边形内: (1)判断方法一(具有一定的局限性):将测试点的Y坐标与多边形的每一个点进行比较,将得到一 个与多边形的 ...

  6. android 经纬度的范围内,在Android里如何判断一个指定的经纬度点是否落在一个多边形区域内...

    在lbs开发中,可能要碰到这样的问题,如何判断一个指定的经纬度点是否落在一个多边形区域内,比如我在地图上画了一个多边形区域,然后给出一个经纬度点,怎样判断这个点是否在这个多边形范围之内,由于我用的是a ...

  7. python 判断一个点(坐标)是否在一个多边形内利用射线法

    看了一篇博客写的用射线法判断一个经纬度点是否在一个多边形的内部的方法 经验证可行所以拿来用作备份: class Point:lng = ''lat = ''def __init__(self, lng ...

  8. [转]如何判断一个点是否在一个多边形内部

    原文地址:http://hi.baidu.com/wayright/item/ad18e4c0c5446b2dee4665c9 在多边性的存储中,每一个多边形都是由一系列连续的点组成,例如保存为数组P ...

  9. 如何判断一个点在多边形内

    一.从三角形开始说起---怎么判断一个点在三角形内 三角形是最简单的多边形了.先说说三角形有哪些判断方法. 参考自:判断一个点是否在三角形内部 - 知乎 几种方法判断平面点在三角形内_独L无二的博客- ...

最新文章

  1. 屏幕后处理——Bloom
  2. python:json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes问题解决
  3. 好用的侧边栏菜单/面板jQuery插件
  4. maven修改setting文件后重启_Maven项目构建
  5. 20165214 预备作业3 Linux安装及学习
  6. .net core通过多路复用实现单服务百万级别RPS吞吐
  7. 【kafka】kafka offset 的存储 (存储zookeeper 与 存储 kafka)
  8. 2021-10-25 Vue异步操作
  9. C/S与B/S架构比较
  10. 《Apache Kafka 实战》读书笔记-认识Apache Kafka
  11. @Scheduled(cron=) spring定时任务时间设置
  12. php采到的数据自动修改入库,基于PHP的简单采集数据入库程序【续篇】_php实例...
  13. 计算机绘图课程选用课本,机械制图课程学习指南
  14. python 会议室预约系统 开源_最新PHP会议室预定管理系统mrbs-1.8.0开源会议室预订系统安装教程...
  15. 弹出USB大容量存储设备时出问题“该设备正在使用中”
  16. 怎么用matlab画心形曲线方程,matlab画心形曲线
  17. 05_解决mac百度网盘下载速度慢问题
  18. 解压命令tar zxvf中zxvf的意思
  19. 许家印马不停蹄 恒大造车提速
  20. c语言录取分数线,近三年各省市录取分数线

热门文章

  1. 火狐浏览器中设置打开新地址时,不会覆盖原页面的方法
  2. js获取 url 参数值的方法总结
  3. MMaction2中AVA数据集标注文件解读
  4. 非系统管理员打开Internet Information Services (IIS)管理器
  5. DeOldify,这个开源的AI代码可以给你的黑白照片上色
  6. CIO40: IT男之日常工作(点线面体)
  7. SEO中长尾关键字的挖掘与布局思路
  8. Realtek PCIe GBE Family Controller(有线网卡)及Intel(R) Wi-Fi 6 AX201 160MHz(无线网卡)前出现出现黄色感叹号!解决方法。(win10)
  9. yac163: linux 下的163相册辅助工具
  10. solr6.4服务器+Tomcat+中文分词器