1. 问题描述:给定一个二维封闭图形点集,判断图形中各点的凹凸性。
  2. 方法:使用矢量判断凹凸性,检测多边形的凸点。参考:判断平面多边形的凹凸性
  3. 关键点:
    (1)通过矢量判断时,需找到图形中第一个凸点:y坐标最大的点,若y坐标最大点不止一个,则寻找其中x坐标最大点
    (2)叉乘公式: 向量A(x1,y1),向量B(x2,y2)
    叉乘结果 = x1 * y2 - x2 * y1
    (3)第一个凸点的叉乘必为正,如果其他点叉乘结果为负,则说明该点为凹点。

下面是该问题的python实现

import numpy as npdef find_ymax(data):"""寻找封闭图形中y坐标最大的点若y坐标最大点不止一个,则寻找其中x坐标最大点Args:data (list): 封闭图形点集Returns:封闭图形中第一个凸点"""ploy = np.array(data)y = ploy[:,1]y_max = y.max()Conv_list = list()for p in data:if p[1] == y_max:Conv_list.append(p)if len(Conv_list) != 1:temp_list = []for p in Conv_list:temp_list.append(p[0])return Conv_list[temp_list.index(max(temp_list))]else:return Conv_list[0]def Conv(data):"""对多边形各点进行凹凸性判断Args:data (list): 封闭图形点集Returns:[list]: 多边形中凹点坐标集合"""Norm_dot = find_ymax(data)num = len(data)Ind = data.index(Norm_dot)Conv_dots = []# 第一个凸点的两条向量边叉乘# if num == 0:#     Vec_A = [data[num][0] - data[Tonum - 1][0] , data[num][1] - data[Tonum - 1][1]]#     Vec_B = [data[num+1][0] - data[num][0] , data[num+1][1] - data[num][1]]# elif num == Tonum - 1:#     Vec_A = [data[num][0] - data[num - 1][0] , data[num][1] - data[num - 1][1]]#     Vec_B = [data[0][0] - data[num][0] , data[0][1] - data[num][1]]# else:#     Vec_A = [data[num][0] - data[num - 1][0] , data[num][1] - data[num - 1][1]]#     Vec_B = [data[num+1][0] - data[num][0] , data[num+1][1] - data[num][1]]Vec_A = [data[Ind%num][0] - data[(Ind-1)%num][0], data[Ind%num][1] - data[(Ind-1)%num][1]]Vec_B = [data[(Ind+1)%num][0] - data[Ind%num][0], data[(Ind+1)%num][1] - data[Ind%num][1]]Vect_Norm = (Vec_A[0] * Vec_B[1]) - (Vec_A[1] * Vec_B[0])# 向量法判断图形中每个点的凹凸性for i in range(num):V_A = [data[(i)%num][0] - data[(i-1)%num][0], data[(i)%num][1] - data[(i-1)%num][1]]V_B = [data[(i+1)%num][0] - data[(i)%num][0], data[(i+1)%num][1] - data[(i)%num][1]]Vec_Cross = (V_A[0] * V_B[1]) - (V_A[1] * V_B[0])if (Vec_Cross * Vect_Norm) < 0:Conv_dots.append(data[(i) % num])return Conv_dotsdata = [[20,12],[25,0],[30,15],[15,17],[15,20],[10,20],[10,10]]
print(Conv(data))

如有不足,还请各位大佬不吝赐教!

多边形的凹凸性判断及python实现相关推荐

  1. 判断多边形的凹凸性和计算多边形面积:利用向量叉乘

    根据百度百科的讲解: 凸多边形 现在重点讲解顶点凹凸性法(最常用也是较为简单的方法):计算总结在最后. 利用向量叉乘的相关知识进行计算:假设当前连续的三个顶点分别是P1,P2,P3.计算向量P1P3, ...

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

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

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

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

  4. 函数的凹凸性证明_判断复杂函数的凹凸性

    判断无人机能量x关系函数的凹凸性(函数是关于v和drt的二元函数) 函数有非常多的参数,极其复杂,看到就烦,我首先用画函数的方法通过图像法来观察,但是画出来的图像不忍直视(或许是我画的图像不对,反正看 ...

  5. 点云凹凸性检验(1/2)

    使用open3d 计算点云法向量并根据法向量判断凹凸性 在某些点云处理场景中,我们不仅需要法向量,还需要法向量所指示的某些区域的点云的凹凸性. 法向量 先去github找个bunny.pcd的实验点云 ...

  6. PCL—点云分割(基于凹凸性) 低层次点云处理

    博客转载自:http://www.cnblogs.com/ironstark/p/5027269.html 1.图像分割的两条思路 场景分割时机器视觉中的重要任务,尤其对家庭机器人而言,优秀的场景分割 ...

  7. 函数凹凸性与黑塞矩阵

    1 同济大学高等数学定义 2 国际上的定义 3 黑塞矩阵 1 同济大学高等数学定义 我们从几何上看到,在有的曲线弧上,如果任取两点,则联结这两点间的弦总位于这两点间的弧段的上方,如图3-8(a):而有 ...

  8. 【高数】高数第三章节——微分中值洛必达泰勒单调性与凹凸性作图弧微分与曲率

    高数第三章节--微分中值&洛必达&泰勒&单调性与凹凸性&作图&弧微分与曲率 0.博主高数相关章节目录 1.数列 1.微分中值定理 1.1 罗尔定理 1.2 费马 ...

  9. 高等数学--函数的单调性,曲线凹凸性及极值(五)

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

  10. 点云凹凸性检验(2/2)

    凹凸性 当我们持有表面点云数据时.可能从某个方向看向数据,此区域是凹陷的,但是当我们从背向看过来时其又是凸起的.这使得我们产生一个误会:在判断点云的凹凸性之前,是否需要先规定一下点云的表侧和里侧? 事 ...

最新文章

  1. html广告20s倒计时,一段广告倒计时退出代码
  2. 无法从“const char [10]”转换为“char *”
  3. QPixmap: It is not safe to use pixmaps outside the GUI thread原因
  4. Git笔记(二)——[diff, reset]
  5. 如果有人问你关系数据库的工作原理,叫他看这篇文章How does a relational database work
  6. 全国公共英语五级(PETS-5) 写作作文
  7. Jenkins file一行代码部署.NET程序到K8S
  8. 【无线串口模块快速选型指南】通信频点、芯片、通信距离、功率灵敏度、电流 空中速率
  9. [react] React的isMounted有什么作用?
  10. Python | Lambda函数与示例
  11. java中的输入语句判断正负_在java中使用方法调用统计数组中正数的个数,将判断数据的正负功能定义成方法...
  12. php页面防刷,PHP防止刷新重复提交页面的示例代码
  13. Linux进程管理内核API函数pid_task( )---根据pid获取task_struct
  14. 机会难得 | 这家上市公司终于招人了
  15. 微信公众平台开发最佳实践
  16. Win10-更改c盘下的用户文件夹名[转]
  17. vuetify calendar实现日历考勤
  18. 避免创业的大忌,我为何给 TDengine 只选择了集群、高性能与 SQL 支持三大特点?
  19. 原生态(PHP和JAVA)研发的文锋网约车APP文锋代驾APP700个功能模块免费开源源码
  20. GitHub Pages 快速搭建个人主页

热门文章

  1. as常用固定搭配_英语专业四级常用固定搭配
  2. 研发思维09----嵌入式智能产品开发经过思考
  3. xamarin.forms 自定义Switch 采用 syncfusion.button中的 sfswitch
  4. SAP 中英文转换-英转中
  5. GoogleNet论文解读
  6. 带键盘计算机,怎么屏蔽笔记本自带键盘
  7. 史上最简单的 GitHub 教程
  8. VBA字典(详解,示例)
  9. FolderSync PC 电脑 FTP 同步方法
  10. android MediaPlayer m3u8 播放