参照《计算机图形学》一书中的描述,多边形(polygon)是由三个及以上的顶面坐标位置描述的平面图形,这些顶点由多边形的边顺序连接。多边形的一个内角由两个相邻边形成的边界之内的角。如果所有内角均小于180度则称为凸(convex)多边形,否则为凹(concave)多边形。

百度多边形凹凸的判断,主要方法有:凸包法、叉乘法(大于和小于180度的符号相反)、辛普森面积法。这里主要学习下叉乘的运用,并配上 C++ Qt 示例代码。

判断方法:为每一条边建立一个向量,使用相邻边的叉积来测试凹凸性。凸多边形的所有相邻边向量叉积同号。如果出现一些正一些负则为凹多边形。

(网上找的图,可以 ABC 分别看作 xyz。食指指向 x ,手心朝向 y 轴,大拇指向上的方向恰好是 z 的方向)

示例:

void Widget::paintEvent(QPaintEvent *)
{//顶点,第一个为凸,第二个为凹/*QVector<QPointF> points = QVector<QPointF>()<<QPointF(50,50)<<QPointF(150,50)<<QPointF(150,100)<<QPointF(100,150)<<QPointF(50,100);*/QVector<QPointF> points = QVector<QPointF>()<<QPointF(50,50)<<QPointF(150,50)<<QPointF(150,150)<<QPointF(100,100)<<QPointF(50,150);//第一个点加到尾便于计算points.append(points.first());//凹标记bool concave = false;//边向量for(int i = 0; i < points.size() - 2; i++){const QPointF &p1 = points.at(i);const QPointF &p2 = points.at(i + 1);const QPointF &p3 = points.at(i + 2);int cross_k = (p2.x() - p1.x()) * (p3.y() - p2.y()) -(p2.y() - p1.y()) * (p3.x() - p2.x());if(cross_k < 0){ //大于还是小于和边向量取的方向有关concave = true;break;}}//叉乘判断凹凸//绘制,红色凹绿色凸QPainter painter(this);painter.setBrush(concave ? Qt::red : Qt::green);painter.drawPolygon(points);
}

平面多边形凹凸判断(叉乘法)相关推荐

  1. 判断平面多边形的凹凸性

    对于平面多边形的三角化处理也是计算机图形学里面的一个领域,最近由于项目的需要,需要对平面多边形进行剖分,特此对其作了些研究. 在对平面多边形进行处理的时候,很多时候需要知道多边形的凹凸性,本文介绍两种 ...

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

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

  3. HDU2108 Shape of HDU【多边形凹凸】

    Shape of HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...

  4. 2021-3-27春季个人赛补题(B - Minimal Area(叉乘法求三角形面积))

    B - Minimal Area(叉乘法求三角形面积) 题目链接: link. 原题描述: You are given a strictly convex polygon. Find the mini ...

  5. Html5多边形相交判定,多边形相交判断算法

    一.规则 判断两多边形是否相交,排除边边重合.以及断点与边重合的情况 二.示意图 示意图.png 三.算法代码(js) /** * 判断两个多边形是否相交(边边重合,点边重合除外) * 核心算法:1- ...

  6. c# 判断点是否在区域内 点在区域内 在多边形内 判断

    方法一 算法 : public int isLeft(Point P0, Point P1,Point P2) { int abc= ((P1.X - P0.X) * (P2.Y - P0.Y) - ...

  7. 叉积求点到平面距离_用叉乘求法向量.doc

    用叉乘求法向量.doc PAGE 1 平面法向量的求法及其应用 平面的法向量 1.定义:如果,那么向量叫做平面的法向量.平面的法向量共有两大类(从方向上分),无数条. 2.平面法向量的求法 方法一(内 ...

  8. android多边形拼图源码,【BMPinTu】一款拼图App的demo。多边形凹凸拼图

    项目介绍: GitHub地址:https://github.com/birdmichael/BMPinTu 项目特点 一款市面少见的拼图demo,很常见的是类似华容道一样的拼图,而不是类似贴图的拼图. ...

  9. Matlab数据的可视化 -- 平面多边形的着色

    本篇微信图文主要介绍Matlab数据可视化方面的内容.fill

  10. 顶角判别法识别多边形的凸凹性,并将凹多边形近似处理为凸多边形

    顶角判别法:    该算法首先在顶点数据集中找J坐标值最大的点,若J坐标值最大的点不止一个,则在J坐标值最大的这些点中找,坐标值最大的点,这样找出的顶 点一定显凸性;然后,以该凸顶点为支点顺时针方向旋 ...

最新文章

  1. 量子纠缠buff加持,雷达精度提高500倍,论文已登物理顶刊
  2. bzoj5147bzoj2121loj6701 字符串游戏
  3. 【CVTE Web后台开发实习生2019.12.05在线笔试】总结
  4. [JSOI2008]最大数maxnumber
  5. jsoup解析百度音乐
  6. Android4.4之Camera2预览流程APP到Driver(十四)
  7. C语言学生管理系统源代码
  8. Android Studio下运行开源项目9GAG遇到的问题
  9. compare的数组升序和降序
  10. 软件工程的未来发展趋势
  11. Android添加Flurry统计
  12. 张峥、小白谈GPT与人工智能:可能是好事,也可能不是
  13. Grad-CAM源码保姆级讲解(pytorch)
  14. [Java]利用jsoup爬取易查分
  15. 安全工具checksec.sh
  16. 浅谈:UEO就是SEO的一种
  17. android 个人记账工具 OnMyMeans 源码地址
  18. collector是什么意思中文翻译_collector是什么意思_collector的翻译_音标_读音_用法_例句_爱词霸在线词典...
  19. 【SQL】sqlzoo练习题Scottish Parliament
  20. 有玩过夺宝类似的平台吗,来说说你的心得吧

热门文章

  1. pandas GUI 神器 D-Tale,可视化操作自动转代码
  2. 头歌-自己动手画CPU(第二关)-原码一位乘法器-Logisim
  3. 优秀课件笔记之中国园林艺术讲稿
  4. Peer Pressure(博弈论+机制设计) 论文阅读笔记
  5. 解决Maven仓库代理时gexin的jar包一直下载不下来的问题
  6. C++-线程的join和detach
  7. 辛普森法 matlab,MATLAB辛普森法则
  8. 倒立摆c语言程序设计,清华大学倒立摆控制系统实验指导书.pdf
  9. 史上最难php,世界上最难的简单几何体 - 我为数学狂 - 简单学习网论坛_中高考学习交流论坛_中学生学习论坛 - Powered by phpwind...
  10. 白帽黑客获 5 万美元赏金!只因利用漏洞控制所有特斯拉汽车