- 14
- 0
- 约2.48千字
- 约 19页
- 2019-11-03 发布于天津
- 举报
凸包convex hull By 张芝源 概念 1 .点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内。 2 .一组平面上的点,求一个包含所有点的最小的凸多边形,这就是凸包问题了。这可以形象地想成这样:在地上放置一些不可移动的木桩,用一根绳子把他们尽量紧地圈起来,这就是凸包了。 怎么从给定的点中找凸包呢? 1.卷包裹算法 2. Graham扫描算法 卷包裹算法 可以说是一个很朴素的算法,其时间复杂度最坏情况为O(n^2),其实现原理非常简单。就像是拿了一根绳子,以最左下方的点开始,围着所有点的外围围了一圈。 先找到横坐标最小的点中纵坐标最小的点,然后以该点作为基准点,对剩余的所有点找到相对当前点的最外侧的点,然后再次以该点作为当前点继续重复直到形成完整的凸包为止。 如何寻找最外侧的点?利用二维向量的叉积公式x1,y1*x2,y2=x1*y2-x2*y1,向量A乘以向量B 如果为正则为A逆时针旋转向B 否则为顺时针。如下图所示,向量JK和JI的叉积为负数,因此JI在外侧。这样得到的凸包是按照逆时针方向排序的。H代表凸包上点的数目,这样时间复杂度为O(HN)。 Graham的栈扫描 Graham的扫描是一个很优美的过程,用到的数据结构也很简单,仅仅是一个栈而已 核心的思想是按照排好的序,依次加入新点得到新的边。 如果和上一条边成
原创力文档

文档评论(0)