计算几何

本文深入探讨了计算几何的基础概念,包括几何查找、多边形处理和凸壳计算。介绍了预处理、线段和三角形的正交询问、多边形的内部判断等关键算法。还讨论了凸多边形的性质,如均衡分层表示,以及如何计算凸壳。此外,文章提到了Voronoi图的基本定理和构造方法,强调了其在解决实际问题中的应用,如货郎担问题和多边形连接等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第0章 预备知识

第1章 几何查找(检索)

1、几何查找包括两类主要问题:1)几何体定位问题;2)范围查找问题。

2、如果在文件中执行一次查找,不必对文件进行预处理,否则需要预处理文件;预处理文件,是指将一批几何对象所对应的数据按一定的结构存放。

3、几何查找耗费的时间包括:询问时间(回答一次询问需要的时间)、存储(数据结构占用的内存)、预处理时间(组织数据或某种结构的时间)、修改时间(指定几何对象所对应的数据插入数据结构或从数据结构中删去所需时间)。

4、确定点q在平面剖分中的位置的方法:

1)水平长条法;

2)链方法;

3)三角剖分加细方法;

4)梯形方法;

5、范围查找问题

回答范围询问,必须要建立d维空间中点集s的查找数据结构,这种数据结构分为静态的(一旦建立便不再修改)和动态的(对像可以删除或插入)。

范围查找的算法:

1)多维二叉树(k-D树)的方法;最坏情况效率地,可能生成满二叉树

2)直接存取方法;基本思想是预先计算所有可能范围查找询问的解,并保留结果,然后进行一次存储便可以查找。耗费时间O(n的三次方+logn/每次)

3)范围树方法;尽可能减少标准区间的数目,从而进一步提高查找时间的效率。相对最快的方法

6、判定点集是否在多边形内

周培德算法:基本思想是,反复求剩余点集的凸壳C,只要判断凸壳C的顶点是否在p内,及P的顶点(m个点)是否在C外,便可确定S中哪些点位于多边形P的内部。

(算法说需要时间比逐点判断好)

7、平面中线段集合空间中三角形集的正交询问

正交限制:

      1、线段的正交限制

      2、三角形的正交限制

第二章 多边形

一、凸多边形

1、定理1,给定凸多边形P的均衡分层表示及P的内点q和任意点x,在时间O(logn)内可以确定x是否在P内,其中n是P的顶点数。

2、定理2,给定凸n边形P的均衡分层表示和直线L,在O(logn)时间内可以确定L与P是否相交并确定L与P的交。

3、定理3,给定凸n边形P的均衡分层表示和(1)线段s,则在时间O(logn)内可以计算p∩L;(2)点p,则在时间O(logn)内可以判定P是否在p内。

4、定理4,给定凸n边形p和凸m边形Q的均衡分层表示,则在O(log(n+m))时间内可以判定P与Q是否相交。

5、定理5,设p与Q是凸n边形,则在O(n)时间内可以计算P∩Q。

二、简单多边形

简单多边形的定义:设平面上n个点p1,p2,......,pn按循环排序方法逆时针排列,p1在pn之后,又设e1=p1p2,e2=p2p3...,是连接点的n条线段,那么这些线段界限一个多边形(简单多边形)且(1)循环排序中相邻线段对的交是它们之间公有的单个点;(2)不相邻的线段不相交。

1、确定任意多边形的核

定义:给定任意简单多边形P,若P内存在点z,使得对于P内的所有点p,线段zp完全位于P内。具有上述性质的点z的轨迹称为多边形P的核。

确定多边形核的算法:

输入  多边形P的顶点序列,p1,p2,...,pn(逆时针排列)

输出  多边形P的核K(P)的顶点序列。

2、多边形的三角剖分

定义:设多边形P有n个顶点p1,p2,...,pn,p1p2是P的对角线,并且不与P的顶点及边相交,它划分P为两部分。对P逐步增加不交叉的对角线,直至P的内部全部被划分成三角形,这样的划分称为多边形的三角剖分。

定理1,每个多边形至少有一个凸顶点。

定理2,顶点数n≥4的多边形至少有一条对角线。

定理3,设多边形P具有n个顶点,对P通过添加零条或者多条对角线可以剖分成三角形。

定理4,n个顶点的多边形P的任一三角形剖分使用n-3条对角线,并且由n-2个三角形组成。

定理5,n个顶点多边形的内角之后是(n-2)π

定理6,多边形P三角剖分的对偶T是一个图,三角剖分中的每个三角形用一结点表示,三角剖分中有相邻边的两个三角形,则所表示的结点pi和pj连以线pipj;

定理7,无孔简单多边形三角剖分的对偶T是一棵树,并且该树的每个结点的度数至多为3.

3、多边形的凸划分


第三章 凸壳

定义1:设S是平面上的非空点集,p1、p2是S中任意两点,如果点p = tp1-(1-t)p2 属于S,其中0≤t≤1,则称S是凸集,这就是说,如果S中任意两点所连线段全部位于S之中,那么S是凸的。

定义2:平面点集S的凸壳CH(S)是包含S的最小凸集。

定义3:平面点集S的凸壳边界BCH(S)是一凸多边形,其顶点为S中的点。

定理1:设S是平面上n个点的点集,则计算CH(S)至少耗费O(nlogn)时间。

定理2:设S是平面上简单多边形顶点序列,|S|=n,则计算CH(S)耗费O(n)时间。

定理3:设S是平面上n个点的点集,p是平面上一点,给定BCH(S)的均衡分层表示,那么在时间O(logn)内可以计算BCH(S∪{p})的均衡分层表示。

定理4:给定平面上两个不相交凸多边形L、R的均衡分层表示BCH({p1,p2,...,pm})和BCH({pm+1,...,pm}),并且设p1≤p2≤...≤pm, pm-1≤...≤pn,其中≤是E的平方上的词典序,则在O(logn)时间内可以计算BCH(p1,p2,...,pn)的均衡分层表示。

一、计算凸壳的算法(二维)

1、卷包裹法,算法时间复杂性为O(n²)

2、格雷厄姆方法,算法时间复杂性为O(nlogn),格雷厄姆方法是求解平面点集凸壳问题的最佳方法。

3、分治算法,时间复杂度为O(nlogn)

4、周培德算法,时间复杂度不超过O(nlogn)次乘法和线性次比较

5、实时凸壳算:许多实际问题的处理中,没有给出所有点,所以需要一种联机算法,一种情况是当阶段计算完成时,算法才接受一个新的输入,另一种情况死后数据按某种规律到达,这时要求算法在下一个数据到达之前完成阶段计算。

6、增量算法,给定n个点集S,增量算法求S的凸壳的基本思想是:一次添加一个点,构造前K个点凸壳时,用到前k-1个点的凸壳,即每次增加一个点到已有的凸壳中去。

时间复杂度为O(nlogn)

7、近似凸壳算法,提出的背景:提高算法效率,减少时间开销,但降低了准确性。

二、计算凸壳的算法(三维)

1、基本概念

定义1,多面体的边界是一个平面有界凸多边形的有限集合,其中凸多边形称为多面体的侧面,两个侧面的交叫做多面体的棱,而棱与棱的交称为多面体的顶点。

定义2,点集S的凸壳边界BCH(S)是由若干平面三角形组成,称这些三角形为BCH(S)的侧面,三角形的边称为BCH(S)的棱(或边),三角形的顶点称为BCH(S)的顶点。

定义3,设平面三角形abc是BCH(S)的一个侧面,并且三角形的3个顶点按逆时针方向排列,则由右手定则确定的正向(与外法线方向一致)称为在平面三角形abc之上,相反的方向称为在平面三角形abc之下。

定义4,如果多面体中某两个邻接侧面所形成的二面角大于π,则称此棱为多面体的凹棱,如图3-12(a)中的棱p1p4。利用“判定一侧面上的点(如p3)是否在另一侧面三角形(如p1p3p4)之上”的方法可以确定该棱是否为凹棱。

2、卷包裹法,算法时间复杂性为O(n²)。

3、分治算法,算法复杂性为O(nlogn);

4、Z算法,算法最坏情况复杂性为O(n²)

5、增量算法,时间复杂度为O(n)

三、凸壳的应用

1、确定任意多边形的凸、凹顶点;

2、利用凸壳求解货郎担问题,是指给定n个点及任意两点之间的距离,求经过每个点恰好一次而且总长度最小的回路。

3、凸多边形直径,求平面点集的直径问题可以转化为求该点集凸壳的直径,求凸壳的直径也就是求凸壳多边形的直径。

4、连接两个多边形成一条回路

       输入:简单多边形p1与p2,其顶点序列分别为{a1,a2,...,an}与{b1,b2,..,bn}

       输出:经过{a1,a2,...,a3}与{b1,b2,...,bm}中各点一次且只一次的回路C.


第四章 Voronoi图及其应用

一、Voronoi图基本概念

定理1,n个点集S的Voronoi图至多有2n-5个顶点和3n-6条边。

定理2,每个Voronoi点恰好是一条Voronoi边的交点。

定理3,设v是Vor(S)的顶点,则圆C(v)内不含S的其他点。

定理4,Voronoi图的直线对偶图是S的一个三角部分。

定理5,如果p1,p2∈S,并且p1是关于p2的最邻近点,则线段p1p2是点集S三角部分的一条边。

定理6,如果p1,p2∈S,并且通过p1和p2有一个不包含S中其他点的圆,那么线段p1p2是点集S三角剖分的一条边,反之亦成立。

定理7,如果p1,p2∈S,则线段p1p2是S的三角剖分的一条边,iff存在通过p1p2的一个空圆:除p1,p2外不包含S中其他点并由该圆限界的闭元域。

如果点集S存在最远点意义下的Voronoi图,那么voronoi点的数目等于点集凸壳的三角剖分的三角形数目,而Voronoi多边形的数目等于凸壳顶点数目。

二、构造voronoi图的算法

1、半平面的交





















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值