zoukankan      html  css  js  c++  java
  • convex hull

    1 什么是convex hull

    就是凸包,是计算几何中的一个概念,计算几何是计算机图形学的基础之一。

    对于二维平面来说是这样的:对于二维平面上的点集,凸包是位于最外层的点构成的包围其它所有的点的凸多边形。

    2 Graham's scan算法

    第一,找initial点

    y最小的点,如果有多个,选择x也最小的点。

    第二,对所有其它的点进行排序

    计算initial点到所有其它点的连线和x轴的夹角,从小到大排列。

    第三,找right turn

    所谓的right turn就是从上个点到本点向对于上上个点到上个点是不是向右转了。如果是的话,就要删除掉上个点,而直接连上上个点,直到是left turn为止,进栈。

    第四,找right turn的起始点

    从第三个点就可以开始找了,先将前两个点入栈。

    遍历完之后,栈里面所剩的点构成的多边形就是凸包。

    3 算法的时间复杂度

    O(nlgn)

    4 算法的正确性

    因为算法遍历了所有的点,并且保证了所有的点都在外接多边形构成的边的左边,所以就保证了所有的点都在该外接多边形的内部。 另外,所有的边都是向左走的,因此这个多边形是一个凸多边形,所以算法是正确的。

  • 相关阅读:
    四则运算
    androidstdio导入工程报错
    日程代码任务1
    软件团队模式选择
    初识软件工程
    java数组中最大的子数组之和
    解决键盘布局错误(日文系统)
    固态硬盘的更替
    ZendDebugger的配置
    apache命令行启动
  • 原文地址:https://www.cnblogs.com/hustdc/p/7611527.html
Copyright © 2011-2022 走看看