四边数据结构(Delaunay / Voronoi)


18

计算几何体或代数学家有2个问题:

我才刚刚开始涉足计算几何,我爱它=)

为了实现Delaunay三角剖分算法,我正在尝试阅读Guibas和Stolfi的著名文章“操纵一般细分和计算Voronoi图的原语”。我很想跳过所有理论上的内容,而只是阅读它们的四边数据结构的描述以节省时间。但是,如果结构被广泛使用,或者仅仅因为它很漂亮,我认为理解本文中的所有数学也许是值得的。

数学对我来说有点困难。我并不完全了解拓扑,但是对它们的边缘代数的描述需要我没有的抽象代数知识。

我的两个问题是:除了计算Delaunay / Voronoi之外,四边结构还有哪些其他应用?它似乎是一个非常强大的工具。

第二个问题;什么是抽象代数?如果您能给我参考抽象代数的介绍,那就太好了,这样我就可以理解它们的边缘代数部分。

谢谢!


3
只是为了填补空白:抽象代数是对遵守某些规则的元素集的研究。您可能已经猜到这些集合满足的规则是闭包,恒等式元素,唯一逆的存在以及随着可交换性,结合性等的性质。这是对集合上的代数的研究,这些行为不一定像实数一样(一个很好的例子是排列)。
罗斯·斯尼德


我想我的第二个问题有点想念。我知道一些小组理论。我知道这是场比赛。只是他们在文章中定义了一个抽象代数: “边代数是一个满足属性E1-E5和F1-F5的抽象代数(E,E *,Onext,Rot,Flip)”
bigmonachus 2011年

[...]我不知道那意味着什么。它不是一个领域代数吗?
bigmonachus 2011年

Answers:


32

我认为Guibas和Stolfi的“边缘代数”形式主义有点不必要。

真正需要做的就是记住原始图和对偶图之间的区别。原始图的每个面都有对应的对偶顶点;原始图的每个边具有对应的双重边;原始图的每个顶点都有一个对应的双面。原始边连接原始顶点和单独的原始面;双边缘连接双顶点和独立的双面。任何事物的对偶都是原始事物。参见Guibas和Stolfi的论文中的图4:f e e v v ffeevv

原始图和对偶图

Guibas和Stolfi建议将每个边缘(原始边缘或双重边缘)考虑为四个定向的定向边缘的集合。为简单起见,我称这些飞镖。每个箭从一个端点指向另一端点,并在本地分隔两个面和。选择哪个端点调用是飞镖的方向,选择哪个端点调用就是它的方向尾巴eeee尾巴eeetail(e)head(e)left(e)right(e)tail(e)left(e)。(Guibas和Stolfi使用“ Org”和“ Dest”代替“ tail”和“ head”,但我更喜欢较短的标签,因为不必要的缩写是邪恶的。)

对于任何飞镖,Guibas和Stolfi会关联三个相关的飞镖:e

  1. 尾部eetailNext(e):飞镖在之后以逆时针顺序离开。tail(e)e
  2. flip(e):与相同的“飞镖” ,但带有和。eleft(e)right(e)
  3. rotate(e):通过将绕其中点逆时针旋转四分之一圈而获得的双重飞镖。e

下一步,旋转和翻转

这三个函数满足各种奇妙的身份,如下所示:

  • right(tailNext(e))=left(e)
  • right(flip(e))=left(e)
  • right(rotate(e))=head(e)
  • flip(flip(e))=e
  • rotate(rotate(rotate(rotate(e))))=e
  • tailNext(rotate(tailNext(rotate(e))))=e

有关完整列表,请参见论文的第83页(但请注意作者使用后缀表示法,大概是因为它更接近声明性代码)。Guibas和Stolfi将满足所有这些身份的任何三重函数称为边缘代数e Flipe.Flip

而且,鉴于这三个功能,一个可以定义其他一些有用的功能,例如

  • reverse(e)=rotate(flip(rotate(e))) —交换头和尾顶点
  • leftNext(e)=rotate(tailNext(rotate(rotate(rotate(e)))))eeleft(e)

最后,了解这些功能可以绝对告诉您有关细分拓扑的所有信息,并且可以使用这三个功能对任何曲面(无论是否可定向)的任何多边形细分进行编码。

四边数据结构是表面图的一种特别方便的表示形式,它提供对所有这些功能的访问,以及一些其他的恒定时间操作,如插入,删除,收缩,扩展和翻转边缘。分割或合并顶点或面;以及添加或删除句柄或大写字母。

玩得开心!


我使用了OmniGraffle。
杰夫斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.