博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Convex Polygon 凸多边形
阅读量:6870 次
发布时间:2019-06-26

本文共 1608 字,大约阅读时间需要 5 分钟。

Given a list of points that form a polygon when joined sequentially, find if this polygon is convex .

Note:

  1. There are at least 3 and at most 10,000 points.
  2. Coordinates are in the range -10,000 to 10,000.
  3. You may assume the polygon formed by given points is always a simple polygon. In other words, we ensure that exactly two edges intersect at each vertex, and that edges otherwise don't intersect each other.

Example 1:

[[0,0],[0,1],[1,1],[1,0]]Answer: TrueExplanation:

Example 2:

[[0,0],[0,10],[10,10],[10,0],[5,5]]Answer: FalseExplanation:

这道题让我们让我们判断一个多边形是否为凸多边形,我想关于凸多边形的性质,我大天朝的初中几何就应该有所涉猎啦吧,忘了的去面壁。就是所有的顶点角都不大于180度。那么我们该如何快速验证这一个特点呢,学过计算机图形学或者是图像处理的课应该对计算法线normal并不陌生吧,计算的curve的法向量是非常重要的手段,一段连续曲线可以离散看成许多离散点组成,而相邻的三个点就是最基本的单位,我们可以算由三个点组成的一小段曲线的法线方向,而凸多边形的每个三个相邻点的法向量方向都应该相同,要么同正,要么同负。那么我们只要遍历每个点,然后取出其周围的两个点计算法线方向,然后跟之前的方向对比,如果不一样,直接返回false。这里我们要特别注意法向量为0的情况,如果某一个点的法向量算出来为0,那么正确的pre就会被覆盖为0,后面再遇到相反的法向就无法检测出来,所以我们对计算出来法向量为0的情况直接跳过即可,参见代码如下:

class Solution {public:    bool isConvex(vector
>& points) { long long n = points.size(), pre = 0, cur = 0; for (int i = 0; i < n; ++i) { int dx1 = points[(i + 1) % n][0] - points[i][0]; int dx2 = points[(i + 2) % n][0] - points[i][0]; int dy1 = points[(i + 1) % n][1] - points[i][1]; int dy2 = points[(i + 2) % n][1] - points[i][1]; cur = dx1 * dy2 - dx2 * dy1; if (cur != 0) { if (cur * pre < 0) return false; else pre = cur; } } return true; }};

本文转自博客园Grandyang的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
composer安装
查看>>
Linux下快速迁移海量文件的操作记录
查看>>
windows环境redis主从安装部署
查看>>
mongodb指南
查看>>
su: user tomcat does not exist
查看>>
java 签名类 Signature
查看>>
非常详细的/etc/passwd解释
查看>>
解决Xcode在debug时不在断点处停止的方法<转>
查看>>
令人眼前一亮的动态规划入门教程
查看>>
[Memcached] telnet命令
查看>>
CodeChef Little Elephant and Movies [DP 排列]
查看>>
【Java集合的详细研究3】Arrays类常用方法
查看>>
Linux下随机生成密码的命令总结
查看>>
Linux 网络子系统之网络协议接口层(一)
查看>>
Nginx配置小结
查看>>
学习一点Markdown的基本知识
查看>>
程序史记:从巴贝奇、爱达到图灵
查看>>
Solidworks工程图如何使用,替换图纸格式模板文件
查看>>
系统重装 如何转换GPT的磁盘格式为MBR或者反过来
查看>>
Window Location对象
查看>>