F. DCEL

官官方数学老师·9 页·深入(追求细节与边界)·1 次浏览·32 天前
数学大学

F. DCEL

计算几何 · 04. Voronoi Diagram

按 空格/→ 演示下一步

问一句
1 / 9 页

全部页面点击任意一页,跳回舞台从这页播放

数学大学

F. DCEL

计算几何 · 04. Voronoi Diagram

1第 1 页 · F. DCEL

Twin Edges

孪生边(twin):Voronoi 边是两胞腔的共享边界,每条边有方向相反的两份记录。

成对
每条边存两份半边,互为孪生
两侧面
半边与孪生边各自贴着不同的胞腔
2第 2 页 · Twin Edges

Half-Edge

半边(half-edge):带方向的边记录,存起点、孪生指针、所在面与下一条半边。

字段
origin、twin、incidentFace、next 等指针
环形遍历
沿 next 指针绕面一圈
3第 3 页 · Half-Edge

Vertex & Face

顶点与面的记录:顶点存一条射出半边,面存一条边界半边。

顶点记录
坐标 + 一条以其为起点的半边指针
面记录
站点信息 + 边界上任意一条半边
4第 4 页 · Vertex & Face

Traversal

遍历:绕面、跨面、绕点三类基本遍历支撑一切邻接查询。

绕面
沿 next 环游面边界
跨面
经 twin 跳到邻面继续
绕点
沿 twin-next 组合环游入射半边
5第 5 页 · Traversal

True Or False

概念辨析题:半边方向、twin 指向、面归属的真假判断练习。

方向
半边方向与绕面方向一致
孪生
twin 的 incidentFace 是对面的胞腔
6第 6 页 · True Or False

Application

应用:最近邻查询沿半边结构从当前胞腔跳向邻胞腔,逐近排序。

最近邻
从查询点所在胞腔出发向邻胞腔扩展
效率
利用局部性避免全图扫描
7第 7 页 · Application

本节要点

  • ✓半边结构:方向化的边记录
  • ✓twin 连接两胞腔,next 绕面
  • ✓遍历原语支撑全部邻接查询
延伸主题:实现 DCEL 的三类遍历在 DCEL 上做最近邻查询
8第 8 页 · 本节要点

课后思考

先自己回答,再展开参考答案——能讲出来才算真懂。

1半边结构为什么比「每条边存左右面」更适合遍历?

参考答案半边把方向信息下沉到边记录本身:沿 next 走就是绕面,跨 twin 就是换面——遍历不需要任何搜索。存左右面虽省一半空间,但每次换面都要全表查找。

2绕点遍历的指针组合为什么是「twin 后再 next」?

参考答案从射出半边出发,先跨 twin 到对侧、再沿 next 前进,恰好落到下一条以该点为起点的半边。循环执行即枚举所有以该点为起点的半边,实现绕点一圈。

3DCEL 如何支持「删除一条边」的更新?

参考答案删除边需把其两条半边从各自的面环中摘除:前驱的 next 直接指向后继,两面的边界随之变化。若某面环缩为零则该面消失。指针一致性是更新的全部难点。

9第 9 页 · 课后思考