CGAL 5.2 - 2D Apollonius Graphs (Delaunay Graphs of Disks)学习与翻译

本文基于CGAL 5.2 - 2D Apollonius Graphs (Delaunay Graphs of Disks) 进行翻译和学习

文章目录

定义

CGAL 5.2 - 2D Apollonius Graphs (Delaunay Graphs of Disks)学习与翻译根据图片提出问题:
what is apollonius diagram?
what is apollonius graph?

已知apollonius graph和apollonius diagram是对偶的关系,下面就是针对上面的两个问题提出定义。

CGAL的2D Apollonius graph类旨在计算 Apollonius diagram或Additively weighted Voronoi diagram(加权voronoi图)的对偶

Apollonius diagrams

part 1

在图上有一组站点, P i = ( c i , w i ) , i = 1... n P_i=(c_i,w_i),i=1...n Pi​=(ci​,wi​),i=1...n,其中 c i c_i ci​是 P i P_i Pi​的点(point), w i w_i wi​是 P i P_i Pi​的权值(weight)。它把平面细分成相互连接的区域,称为细胞(cell),与站点相关的。(见 Figure 52.1 (left))

点 P i P_i Pi​的 c e l l cell cell是平面上比点 P j P_j Pj​更接近 P i P_i Pi​的点的轨迹, j ≠ i j≠i j​=i。

平面上点 x x x到点 P i P_i Pi​的距离 δ ( x , P i ) δ(x,P_i) δ(x,Pi​)定义为:
δ ( x , P i ) = ∥ x − c i ∥ − w i δ(x,Pi)=∥x−ci∥−wi δ(x,Pi)=∥x−ci∥−wi

(本质即为 x x x 到 c i c_i ci​ 的距离 - w i w_i wi​)

其中 ∥ ∥ ∥为欧几里得范数。即 x x x是 n n n维向量 ( x 1 , x 2 , … , x n ) (x_1,x_2,…,x_n) (x1​,x2​,…,xn​),
∣ x ∣ = x 1 2 + x 2 2 + . . . + x n 2 |x|=\sqrt{x_1^2+x_2^2+...+x_n^2} ∣x∣=x12​+x22​+...+xn2​

很容易看出,voronoi图是此图的一种特殊情况,即 w i = 0 w_i=0 wi​=0时,得到的是voronoi图。

然而,位点Pi可能有一个空单元格( e m p t y    c e l l empty\ \ cell empty  cell)。这也可能发生在 p o w e r    d i a g r a m power \ \ diagram power  diagram的情况下,其对偶是规则的三角剖分( r e g u l a r    t r i a n g u l a t i o n regular \ \ triangulation regular  triangulation)

如果是这种情况,我们将站点称为隐藏的( h i d d e n hidden hidden)(图52.1中的黑色圆圈)。一个不隐藏的站点将被称为可见的( v i s i b l e visible visible)。

part 2 : 关于 w i w_i wi​的讨论

如果所有权数 w i w_i wi​都是非负的,那么Apollonius图可以看作是{P1,…,Pn}的圆集的Voronoi图,其中ci为圆心Pi, wi为圆心半径。

(可以理解为,设 x x x 到以 c i c_i ci​为圆心, w i w_i wi​为半径的圆的最短距离 = d i s t a n c e = distance =distance,则 δ ( x , P i ) δ(x,Pi) δ(x,Pi) = {圆外: d i s t a n c e distance distance || 圆内: − d i s t a n c e -distance −distance )

如果权数允许为负,我们需要到三维来解释Apollonius图在几何上的意义。

(这块负值这里我没有看懂)

我们把 二维欧几里得平面 与 三维中的xy平面 等同起来。

那么点集的Voronoi图可以看作是一组三维圆锥体的下包络线(the lower envelope of a set of 3D cones )在xy平面上的垂直投影,定义如下 : 对于二维点集中的每个点 p p p,我们有一个顶点为 p p p的圆锥 C p C_p Cp​。 C p C_p Cp​的轴是一条直线平行于z轴通过 p p p, C p C_p Cp​ 的角度45∘角。最后, C p C_p Cp​包含在正z半空间中。

Apollonius图相当于在z方向移动这些圆锥体的顶点用一个等于weight的量。权值为负的wi会产生顶点在负z-半空间的圆锥,权值为正的wi会产生顶点在正z-半空间的锥。以一种类似于点的方式,Apollonius图可以定义为移位的锥集的下包络线在xy平面上的垂直投影。

请注意,当所有顶点沿z方向平移相同数量时,锥集的下包络线的投影不会改变。特别地,我们可以将所有锥平移足够大的量,这样所有的顶点都在正z-半空间中。从代数上讲,这意味着如果我们把相同的量加到所有的权重上,Apollonius图不会改变,这特别意味着我们可以假设所有的权重都是正的。

根据以上的观察结果,为了简化我们对Apollonius diagrams的讨论,从现在开始,我们假设所有的权重都是正的,我们将把这些站点当作圆(refer to the sites as circles)。

Apollonius graph

part 1

The Apollonius diagram 是一个平面图, 它的对偶 the Apollonius graph 也是平面图。有很多方法可以将它嵌入到平面上,其中一种方法如Figure 52.1 (right).所示。

一旦我们有了Apollonius diagram,Apollonius graph就被唯一地定义了。如果这些圆的位置是一般的( g e n e r a l    p o s i t i o n general \ \ position general  position)(请参阅下面的精确定义),那么Apollonius graph是一些三角形面(远离 这些圆构成的凸包 )所组成的图。在凸包 近处 ,我们可能有一些尖刺(即1度的顶点)。

(所谓三角形,我们指的是每个面恰好有三条边—不一定是直线边)。

为了统一我们对Apollonius graph的处理方法,我们在(有限的)圆的集合上加上一个无限大的虚构圆,我们把这个圆的位置称为无限大( t h e    s i t e    a t    i n f i n i t y the \ \ site\ \ at\ \ infinity the  site  at  infinity)。

我们可以把 Apollonius graph 外表面的所有顶点都连接 t h e    s i t e    a t    i n f i n i t y the \ \ site\ \ at\ \ infinity the  site  at  infinity ,这样我们就得到了一个图,它所有的面都是三角形的。

然而,Apollonius graph 并不是一个三角剖分图,主要有两个原因:一是它的三角形边有曲线边;二是我们可能有一个图的两个面有两条共同的边,这在三角剖分中是不允许的。( Figure 52.1(right)所示的Apollonius graph的圆集图,这两种特性就都出现了。)

part 2 :general position

我们想通过讨论一般位置( g e n e r a l    p o s i t i o n general \ \ position general  position)的概念来结束我们对 Apollonius graphs理论的简要介绍。

如果没有两个三元圆(triplets of circles)具有相同的相切圆( tritangent circle),则称一组圆处于一般位置。这一陈述是相当专业的,最好在 点的环境下 中加以理解。对于点的等价表述是,我们没有定义同一个外圆的两个三连点(triplets of points),或者等价地说,没有四个点是同圆的。相反,当我们有退化位置的圆时(in degenerate position),Apollonius graph 的存在面有三条以上的边。我们可以通过任意方式简单地对相应的面进行三角化,得到一个图形的三角化版本。

事实上,在CGAL中实现的算法具有这样一个特性:它总是返回一个有效的 Apollonius graphs的三角化版本。这里的"有效"是指它包含了实际的Apollonius graph (也就是Apollonius diagram的实际对偶),并且当存在面的边数大于三的时候,该面和构成它的面们,就被三角化了。它们被三角化的方式取决于图表中圆圈插入和删除的顺序。(这一段没有看懂)

part 3 :hidden circles

最后一点是关于隐藏圆圈的(hidden circles)。首先,我们想要更精确地定义隐藏圆:如果一个圆的单元格内部是空的(empty interior),我们就说它是隐藏的。这个定义允许我们保证所有可见的圆圈都有二维区域的细胞。从几何学上讲,一个圆是隐藏的,这意味着它包含在另一个圆的圆盘的闭合中(参见图52.1)。注意,包含在几个圆盘的并集中的圆,而不包含在其中任何一个圆盘的闭包中,是不隐藏的。

隐藏的圆圈给我们的算法和软件设计带来了额外的困难。因为我们允许在希望的情况下插入和删除圆圈,所以在某个时间点隐藏的圆圈可能会在以后的时间点变得可见;例如,如果我们删除隐藏它的圆,就会发生这种情况。为了这个目的,我们储存隐藏的圆圈,当它们变得可见时,让它们重新出现。我们将在下面详细讨论这个问题。就目前而言,用户有能力控制这种行为就足够了。更具体地说,我们可以抛弃隐藏的圆圈。例如,当我们期望只做插入时,这种选择是完全自然的,因为在这种情况下,隐藏的圆将永远不会再次出现。另一方面,如果删除也是预期的,那么我们就失去了让隐藏的圆圈重新出现的能力。

上一篇:阿里淘系优质开源项目推荐(下)


下一篇:关于 hive 特殊字段的应用距离