您好、欢迎来到现金彩票网!
当前位置:2019正版免费全年资料 > 凸包 >

如何用matlab做convex hull 基于不同分组的点

发布时间:2019-08-09 05:41 来源:未知 编辑:admin

  长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。凸包上的顶点们有顺序的沿著外围绕行一圈。若能照此顺序来包,就不必以穷举所有点的方式来寻找最外围的点。Grahams Scan即是尝试将所有点按照顺序排好,再来做绕一圈的动作。

  顺序该如何决定呢?只要能确保凸包各顶点的前後顺序是正确的,那便不会包错。一个简单的想法是依角度排序──只要将中心点设定在凸包内部或设定在凸包上面,便可以确保凸包各顶点的前後顺序必定正确(读者可自行证明此说)。

  除了凸包各顶点的前後顺序要正确,另外还要限制所有点依照前後顺序连线起来後,不会绕成超过一个的圈圈,也不会有任何边重叠。更精准的说法是:会形成简单多边形(simple polygon),不会有边相交。如此一来,便不必理会那些不在凸包上面的点的前後顺序,因为那些点会在找最外围的点的时候被淘汰掉(读者可自行证明此说)。

  一般来说,选择凸包上面的端点当作排序角度时的中心点是比较好的,因为最大的夹角必会小於180度,而可以使用外积运算来排序。(外积在大於180度时会得负值、等於180度时会等於零,导致排序错误。)

  如果凸包各顶点的前後顺序是错误的,或者所有点依照前後顺序连线後产生了很多圈圈,就会发生惨剧。有时甚至会找出凹的形状。

  其他细节在演算法书籍上面皆可找到,故不细讲。时间复杂度为O(NlogN),主要取决於排序的时间;若用Counting Sort之类的排序方法便可达到O(N);若已知这些点构成的简单多边形之後,便不需排序,就只需O(N)。

  若要连凸包上面共线的点都找出来,便要小心处理刚开始包、快要包好时产生共线的情形,这些点的先後顺序决不能乱。

http://exlei.net/tubao/422.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有