Thursday, August 30, 2018

[LeetCode]Convex Polygon


题目中给我们的点要不是顺时针方向,要不是逆时针方向。判断是不是Convex Polygon,我们可以发现一些规律,当我们顺时针遍历Convex Polygon的顶点时,那么其一直是"向右边拐"的(当前边的方向和下一条边的方向);反之如果是逆时针遍历,其一直是"向左边拐"的。那么我们如何判断向左或者向右拐呢,我们需要用到向量的叉积。假设当前边为a = (x1, y2, 0),下一条边为b = (x2, y1, 0),a和b均为向量,a x b = (x1* y2 - x2 * y1)。根据右手法则,如果从a到b时"向左边拐的话",那么a x b一定是沿着z轴正方向;反之如果是“向右边拐”,那么a x b一定是沿着z轴的反方向。所以我们可以通过a x b的值来判断从a到b事左拐还是右拐。由于题目给的点顺序可能是顺时针或者逆时针,所以我们要判断a x b是不是全部为负或者正。时间复杂度O(n),假设有n个点,代码如下:


No comments:

Post a Comment