voronoi图的算法编程实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

voronoi图的算法编程实现

悬赏分:10 |解决时间:2010-4-9 10:19 |提问者:craftboy000

给个代码,谢谢!

最佳答案

输入:点集S = {p1, p2, …, pn}。

1. 任取pi, pj, pk三点连成三角形

2. 求出此三角形的外心v和半径d

3. 对图中点计算距离d(pr, v),r=1…n并据此将各点排序,得到p1, p2, …, pn-3。l←1。

4. if d(pl, v)>d then goto 6

5. 改取pl, pi, pj组成三角形。若有多点满足d(pl, v)

6. 判定pl在已有哪条有向边或哪两条有向边右侧

7. 修改pl所在多边形的边界及顶点

8. l←l+1,goto 6 直到l>n-3

步骤1,2,4,5,7时间为常数;步骤3要求n-3次计算距离及nlogn次比较;步骤5到步骤2的循环为常数次,步骤6需要O(n)次计算,步骤8 循环n-3次,代价3+4+…+n-1 = O(n2),总时间复杂性为O(n2)。

或者

1. 划分S为规模近似相等的子集S1, S2

2. 递归地构造Vor (S1)和Vor(S2)

3. 构造折线B分开S1, S2,使得对B上任一点v及S1中的点a和S2中的点b,有d(a, v)=d(b, v)。

4. 删去B左侧的Vor(S2)的所有边和位于B右侧的Vor (S1)的所有边,得到Vor(S)

3

回答时间:2010-3-31 21:44 |我来评论

向TA求助

回答者:zhangsolomon|二级采纳率:25%

擅长领域:软件操作系统/系统故障程序设计秦皇岛市物理学

参加的活动:

提问者对于答案的评价:

谢谢帮助哈

相关文档
最新文档