平面点集凸壳的快速算法_赵军
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图 1 点集的划分
断其凹凸性,在此过程中如果判断出某个顶点是凹顶点,则删
显然点集凸壳上的点不会超出矩形 M1M2M3M4 的范围, 并 且 凸 壳 上 的 点 除 了 H1 ~H8 外 只 能 出 现 在 小 矩 形 区 域
除该顶点,并返回前一个顶点,沿顺时针方向继续判断,直至最 后一个顶点。经过如此的判断删除最终会得到一个凸多边形,
定义 3 极点顺序法确定多边形顶点凹凸性。对于方向 已确定的简单多边形 P,判断其顶点 p(i 1≤i≤n)凹凸性的 方法是:取其前后相邻两顶点 pi-1、pi+1 与其构成一个三角形 △pi-1pipi+(1 p0=pn,pn+1=p1),如果该三角形的方向与简单多边形的 方向一致,则顶点 pi 为凸顶点,若相反则顶点 pi 为凹顶点。三
H4 rb1
H4 rb1
H4 rb1
H4 rb1
rb2
rb2
rb3
rb2 rb3
H5
H5
H5
H5
图 4 子集 RB 中点的处理
H7
H7
H7 lb3
H7 lb3
lb2 lb1
lb2 lb1
lb2 lb1
H6
H6
H6
H6
图 5 子集 LB 中点的处理
ÁM1
H1
H2
M2
H8 H7
M5 M6 M8 M7
H3 H4
平面点集的凸壳指的是包含点集中所有点的最小凸多边 形,且其顶点必须为点集中的点。平面点集的凸壳问题在计算 机图形学、图像处理、模式识别、地理信息等众多领域中有广泛 的应用。对于凸壳的计算国内外进行了不少研究,提出过如卷 包裹法、格雷厄姆算法、分治算法、增量算法、实时算法、快速算 法等。Yao[1]证明了 O(nlogn)是平面点集凸壳算法时间的复杂 度下限,因而尽量减少参与构建凸壳的离散点数目成了提高凸 壳计算速度的重要途径。刘润涛[2]在对多边形凸壳的计算中利 用了多变形的极点进行划分区域,从而删除部分点来节省计算 时间,但他忽视了极值点重复的情况。孔宪庶[3],陈平[4]、金文 华[5]、周培德[6]也都分别提出过计算平面点集凸壳的算法。但是 这些算法在对点的处理中都免不了要用到乘法运算来确定点 与直线的位置关系,用时较多。
在 Pl 子集中 y 坐标最大的点记为 H8,y 坐标最小的点记 为 H7;
在 Pr 子集中 y 坐标最大的点记为 H3,y 坐标最小的点记 为H4;
在 Pt 子集中 x 坐标最小的点记为 H1,x 坐标最大的点记 为 H2;
在 Pb 子集中 x 坐标最小的点记为 H6,x 坐标最大的点记 为 H5。
56 2009,45(1)
Computer Engineering and Applications 计算机工程与应用
平面点集凸壳的快速算法
赵 军 1,曲仕茹 2 ZHAO Jun1,QU Shi-ru2
1.兰州交通大学 数理与软件工程学院,兰州 730070 2.西北工业大学 自动化学院,西安 710072 1.Lanzhou Jiaotong University,Lanzhou 730070,China 2.Northwestern Polytechnical University,Xi’an 710072,China E-mail:zhaojun@mail.lzjtu.cn
H1
H1
H1
lt1 H8
lt2 lt1 H8
lt2 lt1 H8
图 2 子集 LT 中点的处理
多边形为 逆时针
多边形为 顺时针
NXmin<NXmax 且(NYmin<NXmin 或者 NYmin>NXmax 或者 NXmin<NYmax<NXma)x NXmin<NXmax 且(NYmax<NXmin 或者 NYmax>NXmax 或者 NXmin<NYmin<NXma)x
NXmin>NXmax 且(NYmax<NXmax 或者 NYmax>NXmin 或者 NXmax<NYmin<NXmin) NXmin>NXmax 且(NYmin<NXmax 或者 NYmin>NXmin 或者 NXmax<NYmax<NXmin)
2 算法原理
对于给定的平面点集,为了提高求其凸壳的效率,应尽可 能高效地删除不在凸壳上的点。为此采取了先将点集中可能的 凸壳顶点划分在 4 个区域中,然后逐个区域删除明显不在凸壳
H2 rt1
H2 rt1
H3
H3
图 3 子集 RT 中点的处理
同理对子集 RB 中的点需要找出 x 坐标最大的点并删除 y 坐标大于等于其 y 坐标的点,持续搜索删除直至 RB 为空,可 得到点列 prb={H4,…,H5},如图 4。对子集 LB 中的点则要找 y 坐标最小的点并删除 x 坐标大于等于其 x 坐标的点,持续搜索 删除直至 LB 为空,可得到点列 plb={H6,…,H7},如图 5。
Σn λi≡1,λi≥0,λi∈R,i=1,2,…,n}为{pi }i=1 的凸包,包含 S 的
i=1
最小凸多边形为 S 的凸壳。 定义 2 对于简单多边形某个顶点,若交于该顶点的相邻
两边所形成的内角(即由该多边形所围成有界区域内所形成的 角)小于 180°,称该顶点为凸顶点;否则,称其为凹顶点。所有 顶点为凸顶点的多边形称为凸多边形。
表 1 利用 4 个极点确定多边形方向的规则
所有 y 坐标小于等于该点 y 坐标的点;然后在 LT 剩余点中再 找出一个 x 坐标最小的点如图 2 中 lt2,并将其放入 plt 末尾,删 除 LT 中 y 坐标小于等于该点 y 坐标的点,持续搜索删除直至 LT 为空。将 H1 点放入 plt 末尾,得到点列 plt={H8,…,H1}。
基金项目:国家自然科学基金(the National Natural Science Foundation of China under Grant No.60134010);兰州交通大学“青蓝”人才工程资助计划 (No.QL-06-11A)。
作者简介:赵军(1975-),男,副教授,博士生,主研方向:计算机图形图像学;曲仕茹(1963-),女,教授,博士生导师,主研方向:交通信息与控制。 收稿日期:2008-04-29 修回日期:2008-07-29
ÁM4
H6 H5
M3
最后将 4 个点列按序合并为一个点列{plt,prt,prb,plb},其中 可能会出现重复的 H(i i=1,2,…,8),删除重复点,然后顺次连 接各点可得到一个顺时针方向的简单多边形,称其为点集的轮 廓多边形,如图 6(a)。对此多边形从第二个点开始(因为第一 点 H8 一定是凸顶点),沿着顺时针方向逐点利用极点顺序法判
摘 要:提出一种计算平面点集凸壳的快速算法。利用极值点划分出四个矩形,它们包含了所有凸壳顶点,通过对矩形中的点进行 扫描,排除明显不是凸壳顶点的点,剩余的点构成一个简单多边形。再利用极点顺序法判断多边形顶点的凹凸性并删除所出现的 凹顶点,最终得到一个凸多边形即为点集的凸壳。整个算法简洁明了,避免了乘法运算(除最坏情况外),从而节省计算时间。 关键词:平面点集;凸壳;简单多边形;凹顶点 DOI:10.3778/j.issn.1002-8331.2009.01.016 文章编号:1002-8331(2009)01-0056-03 文献标识码:A 中图分类号:301.6
对子集 RT 中的点作如下处理:建立一个点列 prt={H2},找 出 RT 中 y 坐标最大的点,如图 3 中 rt1 点,若这样的点不止一 个,取其中 x 坐标最大的点,将其放入 prt 末尾,并删除 RT 中所 有 x 坐标小于等于该点 x 坐标的点;然后在 RT 剩余的点中再 找出一个 y 坐标最大的点并将其放入 prt 末尾,删除 RT 中 x 坐 标小于等于该点 x 坐标的点,持续搜索删除直至 RT 为空,将 H3 点放入 prt 末尾,得到点列 prt={H2,…,H3}。
Á 上的点,结果会得到一个点集的外轮廓点列。此点列确定一个
简单平面多边形,通过判断顶点的凹凸性对多边形进行所有凹 顶点删除,最终得到一个凸多边形即为所求的凸壳。具体如下:
对平面点集 pi=(xi,y)i ,i=1,2,3,…,n,求出 xmax=max(x)i , xmin=min(x)i ,ymax=max(y)i ,ymin=min(y)i ,其中所有具有最小 x 坐 标值的点构成的子集称为 Pl 子集,具有最大 x 坐标值的点构 成的子集称为 Pr 子集,具有最小 y 坐标值的点构成的子集称 为 Pt 子集,具有最小 y 坐标值的点构成的子集称为 Pb 子集。
根据凸壳顶点在点集中的分布特点提出了一种算法。第一 步将点集先分区并删除不包含凸壳顶点的区域,第二步对剩余 分区内的点作精简并得到点集的一个外围轮廓多边形,第三步 精确删除此多边形中不是凸壳顶点的点,最终得到的凸多边形
即为凸壳。
1 相关定义
n
Σ 定义 1 设 pi∈R2,(i=1,2,…,n),称点集 S={s|s= λi pi, i=1 n
ZHAO Jun,QU Shi-ru.Efficient convex hull algorithm for plane point set.Computer Engineering and Applications,2009, 45(1):56-58.
Abstract:An efficient algorithm for computing the convex hull of plane point set is proposed.Firstly,according to the extremity point of the point set,the point on the convex hull is restricted in four rectangles.By scanning the point in rectangles the point which is in evidence not on the convex hull is eliminated,and remain points can constitute a simple polygon.Then,the convexityconcavity of polygon’s vertex is recognized by the vertices sequence and all concavity vertexes are deleted.Lastly,a convex polygon is obtained and it is just the convex hull of the point set.Test results show the high efficiency and stability of this terse algorithm. Key words:plane point set;convex hull;simple polygon;concave vertex
赵 军,曲仕茹:平面点集凸壳的快速算法
2009,45(1) 57
角形的方向可按极点顺序法进行判断:设三角形由 p1、p2、p3 顺 序构成,分别用 NXmin 表示三个点中 x 坐标最小的点的序号、 NXmax 表示三个点中 x 坐标最大的点的序号、NYmin 表示三个点中 y 坐标最小的点的序号、NYmax 表示三个点中 y 坐标最大的点的 序 号 (显 然 NXmin、NXmax、NYmin、NYmax 的 值 为 1、2 或 者 3)。 通 过 NXmin、NXmax、NYmin、NYmax 的大小关系可确定此三角形的方向,规 则[7]见表 1。
M1H1M5H8、H2M2H3M6、H4M3H5M7、H6M4H7M8 内部。将所有位于矩
H1
H2
Hale Waihona Puke BaiduH1
H2
形 M1H1M5H8 中的点归为子集 LT,所有位于矩形 H2M2H3M6 中
定义 M1=(xmin,yma)x ,M2=(xmax,yma)x ,M3=(xmax,ymin),M4=(xmin, ymin),M5=(H1x,H8)y (其中 H1x 表示 H1 点的 x 坐标,以下类似), M6=(H2x,H3)y ,M7=(H5x,H4)y ,M8=(H6x,H7)y ,如图 1。