Combinatorial Surface 组合曲面
序言
-
A surface is, roughly speaking, the “outer shell” of a shape—for instance, you can think of a whole orange as a solid ball; its peel describes a spherical surface (especially if we consider an idealized peel with zero thickness). Different objects we encounter in our daily lives have boundaries described by different surfaces. For instance, the glaze covering a donut makes a torus rather than a sphere. (Hopefully all this talk of oranges and donuts is making you hungry for some geometry. . . ) As a prelude to really getting into the differential geometry of surfaces, we’re going to start by looking at objects that are easy to understand from a purely discrete point of view, namely, combinatorial surfaces, or descriptions of shapes that only tell you how surfaces are connected up and not where they are in space.
表面,粗略地说,是形状的“外壳”——例如,可以把整个橙子想象成一个实心球;它的果皮则是一个球面(特别是我们考虑其为厚度为零的理想果皮)。我们日常生活中遇到的不同物体的边界有不同的表面描述。例如覆盖甜甜圈的糖霜形成一个圆环而不是球体。作为真正进入表面微分几何的开始,将从纯粹离散的交付来看较容易理解的物体,即组合曲面,或者说只向你告知曲面是如何连接起来的,而不讨论它们在空间中位置的形状描述。 -
In discrete differential geometry, combinatorial surfaces effectively play the same role that topological surfaces do in the smooth setting. We won’t get deep into topology in these notes, but working with discrete surfaces “sans geometry” should give you a pretty good feel for what topology is all about. In particular, we’ll talk about several different ways to encode the connectivity of combinatorial surfaces: using an abstract simplicial complex, adjacency matrices, and a halfedge mesh, all of which tie in to the richer geometric objects and algorithms we want to work with later on. (Those craving a more technical treatment may want to check out Hatcher’s book on algebraic topology [Hat02].)
在离散微分几何学中,组合曲面实际上扮演着与光滑设置中的拓扑曲面相同的角色。在这些注释中,不会深入探讨拓扑学,但在“没有几何”的情况下研究离散曲面,应该能够让人对拓扑学有一个很好的了解。特别是,我们将讨论集中不同的方法来编码曲面的联通性:使用抽象单纯复形、邻接矩阵和半边网格,所有这些都与稍后要使用的更丰富的几何对象和算法有关。(技术性内容可参考《代数拓扑学》[Hat02])。 -
Taking a cue from “Albert Einstein: Everything should be made as simple as possible, but no simpler.”, we’re going to make some simplifying assumptions about what shapes look like, while still retaining enough flexibility to describe the kinds of objects found in the natural world. These simplifications will both make it easier to establish clean descriptions and definitions of geometric phenomena (such as curvature), and will ultimately help us build lean, clean algorithms that don’t need to consider lots of special situations and corner cases. The basic simplifying assumption of differential geometry is that the shapes we want to study are manifold.
借鉴“Al”的经验,考虑对形状的外观做一些简化假设,同时保留足够的灵活性来描述自然界中的各种物体。这些简化将使我们更容易建立对几何现象(如曲率)的简介描述和定义,并最终帮助我们建立精简、简介的算法,而无需考虑发亮的特殊情况和边角案例。微分几何学的基本简化假设是,要研究的形状是流形。 -
Loosely speaking this means that, at least under a microscope, they look the same as ordinary Euclidean space. For instance, standing on the surface of the (spherical) Earth, it’s pretty hard to tell that you’re not standing on a flat plane. The manifold assumption is powerful because it lets us translate many of the things we know how to do in flat Euclidean spaces (e.g., work with vectors, differentiate, integrate, etc.) to more interesting curved spaces.
泛泛来讲,这意味这至少在显微镜下,他们看起来与普通的欧几里得空间一样。例如,站在(球形)地球表面,很难说你不是站在一个平面上。流形假设之所以强大,是因为它能让我们把许多在平面欧几里得空间中做的事情(如处理向量、微分、积分等)转化到更有趣的曲线空间中。 -
There are in fact many distinct ways in which a shape can “look like Euclidean space,” leading to many distinct sub-areas of differential geometry (differential topology, conformal geometry, Riemannian geometry, . . . ). For now, we want to focus on an utterly basic property of surfaces, namely that around any point you can find a small
neighborhood that is a topological disk.
事实上,有许多不同的方法可以让一个形状“看起来像欧几里得空间”,这就导致了微分几何的许多不同的子领域(微分拓扑学、共形几何、黎曼几何…)。现在,我们要重点讨论曲面的一个完全基本的性质,即在任意一点周围,你都可以找到一个拓扑圆盘的小邻域。
-
A topological disk is, roughly speaking, any shape you can get by deforming the unit disk in the plane without tearing it, puncturing it, or gluing its edges together. Some examples of shapes that are disks include a flag, a leaf, and a glove. Some examples of shapes that are not disks include a circle (i.e., a disk without its interior), a solid ball, a hollow sphere, a donut, a fidget spinner, and a teapot. Pictured above, for instance, we have a topological disk (left) a topological annulus (center) and a topological (sphere) made by gluing together a finite number of polygons along their edges.
大体来讲,拓扑圆盘是指通过在平面上对单位圆盘进行变形而不使其撕裂、刺穿或将其边缘粘在一起所得到的任何形状。一些圆盘形状的粒子包括旗帜、树叶和手套。非圆盘形状的例子包括圆(没有内部的圆盘)、实心球、空心球、甜甜圈、小飞人和茶壶。例如,上图中有一个拓扑圆盘、一个拓扑环和一个拓扑球,他们都是有有限数量的多边形沿边缘粘合而成。 -
In this chapter we’ll start out by defining an abstract simplicial complex, which breaks a shape up into simple pieces like edges, triangles, and tetrahedra. Any abstract simplicial complex can be encoded by incidence matrices, which are basically just big tables recording which elements are next to which other elements. Although this description can capture some pretty complicated shapes, it’s often more general than what we really need for discrete differential geometry.
在本章中,我们将首先定义一个抽象单纯复形,它将一个形状分解成边、三角形和正四面体等简单的片段。任何抽象简约复数都可以用入射矩阵来编码,入射矩阵基本上就是一个大表格,记录了哪些元素与哪些其他元素相邻。虽然这种描述可以捕捉到一些相当复杂的形状,但它往往比我们真正需要的离散微分几何学更为宽泛。 -
We therefore take a look at the halfedge mesh, which is specifically tailored to two-dimensional surfaces, and can easily describe surfaces with general polygonal faces (rather than just triangles). The halfedge mesh will serve as our basic data structure for most of the algorithms we consider in these notes. At the end of the chapter, we’ll do some exercises that reveal some fun, interesting, and useful properties of combinatorial surfaces, and will get some hands-on intuition for how all these representations fit together by writing some code that lets us interactively navigate a combinatorial surface.
-
因此,我们来看看半边网格,它是专门为二维曲面定制的,可以轻松描述具有一般多边形面(而不仅仅是三角形)的曲面。半边网格将作为我们的基本数据结构,用于本注释中的大部分算法。在本章的最后,我们将做一些练习,揭示组合曲面的一些有趣、好玩和有用的特性,并通过编写一些代码,让我们以交互方式浏览组合曲面,亲身体验所有这些表示法是如何结合在一起的。
2.1 Abstract Simplicial Complex 抽象简单复形
- How can we encode surfaces by a finite amount of information that makes it possible to distinguish a sphere from a torus? For now, let’s forget about shape or geometry (how big, small, thick, thin, etc., the shape is) and focus purely on connectivity: which pieces of the surface are connected to each other, and how?
我们怎样才能用有限的信息量对表面进行编码,从而区分球面和环面呢?现在,让我们暂时抛开形状或几何(形状的大、小、厚、薄等),只关注连接性:表面的哪些部分相互连接,如何连接?
-
There are many different ways to describe the connectivity of a discrete surface; one way is to use a simplicial complex—which in in fact can encode much more complicated objects than just surfaces. The basic idea is to start out with a set V of vertices, which we can identify with a collection of integers:
V = {0, 1, 2, . . . , n}
We also need some information about how these vertices are connected. The idea of a simplicial complex is to specify subsets of these vertices that are “right next to each-other,” called k-simplices.
The number k ∈ Z > = 0 k \in Z_{>=0} k∈Z>=0 is a nonnegative integer telling us how many elements are in this set: an abstract k-simplex is a set of ( k + 1 ) (k + 1) (k+1) distinct vertices, and we call k the degree of the simplex. For instance, here’s a triangle or 2-simplex:
{3, 4, 2}
and here’s a 1-simplex:
{3, 5}
有许多不同的方法来描述离散曲面的连通性;其中一种方法是使用简单复数–事实上,简单复形可以编码比曲面复杂得多的对象。其基本原理是从顶点集合 V 开始,可以用整数集合来识别它:
V = {0, 1, 2, . . . , n}
我们还需要一些关于这些顶点如何连接的信息。简单复数的概念是指定这些顶点 “彼此相邻 ”的子集,称为 k-简单。数 k ∈ Z > = 0 k \in Z_{>=0} k∈Z>=0 是一个非负整数,它告诉我们这个集合中有多少个元素:一个抽象的 k k k-单纯形是由 ( k + 1 ) (k + 1) (k+1) 个不同的顶点组成的集合,我们称 k k k为单纯形的度数。例如,这里有一个三角形或 2-单纯形:
{3, 4, 2}
一个 1-单纯形:
{3, 5} -
Geometrically, we can think of a 2-simplex as specifying a triangle, and a 1-simplex as specifying an edge, as depicted in Figure 1, left; a 0-simplex contains just a single vertex. For now we won’t associate specific locations with the vertices—for instance, Figure 1, right is another perfectly good depiction of these simplices.2 For this reason we call these simplices abstract—they don’t pin down some concrete shape in space, but just tell us (abstractly) how vertices are connected up. For this reason we can go as high as we like without having to think about how this thing looks in space (3-simplex, 4-simplex, 5-simplex, …). We also don’t care (for now) about the order in which the vertices3 are specified: for instance {2, 3, 4} and {3, 2, 4} specify the same 2-simplex as {3, 4, 2}. Note that for convenience, we will often identify any vertex i ∈ V i ∈ V i∈V with the corresponding 0-simplex { i } ∈ K \{ i \} ∈ K {i}∈K.
从几何上讲,我们可以将2-单纯形视为指定一个三角形,将1-单纯形视为指定一条边,如图1左所示;0-单纯形仅包含一个单独的顶点。目前,我们不将特定的位置与顶点相关联——例如,图1右同样是对这些单纯形的完美描绘。因此,我们称这些单纯形为抽象的——它们并不确定空间中的具体形状,而只是(抽象地)告诉我们顶点是如何连接起来的。因此,我们可以随意提高到任意维度,而无需考虑这个东西在空间中的外观(3-单纯形,4-单纯形,5-单纯形,…)。目前,我们也不过分关心顶点的指定顺序:例如,{2, 3, 4} 和 {3, 2, 4} 指定的2-单纯形与 {3, 4, 2} 是相同的。请注意,为了方便起见,我们通常会将与顶点 i ∈ V i ∈ V i∈V 对应的0-单纯形 { i } ∈ K \{ i \} ∈ K {i}∈K 识别为同一个对象。 -
Any (nonempty) subset of a simplex is another simplex, which we call a face; a strict subset is called a proper face. For instance, {2, 3} is a proper face of {3, 4, 2}, and {2, 3, 4} is a face of {3, 4, 2}, but not a proper one.
任何(非空)单纯形的子集都是另一个单纯形,我们称之为面;一个真子集被称为真面。例如,{2, 3} 是 {3, 4, 2} 的一个真面,而 {2, 3, 4} 是 {3, 4, 2} 的一个面,但不是真面。 -
An abstract simplicial complex is, roughly speaking, just a collection of abstract simplices. However, we will put a very basic condition on this collection that ensures we can work with it in a natural way—and which ultimately helps us to make connections with smooth surfaces. In particular, we will say that a collection of simplices K K K is a simplicial complex if for every simplex σ ∈ K σ \in K σ∈K, every face σ ′ ⊆ σ σ^{′} \subseteq σ σ′⊆σ is also contained in K K K. For instance, a bunch of triangles do not constitute a simplicial complex; you have to include their edges and vertices as well. We will often assume that a simplicial complex is finite (i.e., contains finitely many simplices), though in principle there’s no reason you can’t consider an infinite complex—say, a triangulation of the whole Euclidean plane.
抽象单纯复形,大致来说,就是一组抽象单纯形的集合。然而,我们将对这个集合施加一个非常基本的条件,以确保我们可以以自然的方式处理它——这最终有助于我们与光滑曲面建立联系。具体来说,我们将说一组单纯形 K K K 是一个单纯复形,如果对于每个单纯形 σ ∈ K σ \in K σ∈K,其每个面 σ ′ ⊆ σ σ^{′} \subseteq σ σ′⊆σ 也包含在 K K K 中。例如,一堆三角形并不构成一个单纯复形;你必须还包括它们的边和顶点。我们通常会假设单纯复形是有限的(即,包含有限多个单纯形),尽管从原则上讲,考虑一个无限复形也是可以的——比如说,整个欧几里得平面的三角剖分。 -
A subcomplex K ′ K^{′} K′ of a simplicial complex K K K is a subset that is also a simplicial complex. For instance, a single edge is not a subcomplex of any complex, but an edge with its two vertices is a subcomplex. A complex K K K is a pure k-simplicial complex if every simplex σ ′ ∈ K σ′ \in K σ′∈K is contained in some simplex of degree k k k (possibly itself). For instance, a bunch of triangles with edges and vertices hanging off the side or floating around by themselves is not pure:
单纯复形 K K K 的子复形 K ′ K^{'} K′ 是一个子集,它本身也是一个单纯复形。例如,单独一条边不是任何复数的子复形,但带有其两个顶点的边是一个子复形。如果一个单纯复形 K K K中的每个单纯形 σ ′ ∈ K σ' \in K σ′∈K 都包含在某个度数为 k k k 的单纯形中(可能它自身就是),那么这个复形 K K K 是一个纯 k k k-单纯复形。例如,一堆三角形以及它们旁边悬挂的边和顶点,或者单独漂浮的边和顶点,并不是纯的:
-
In the end, we end up with a pretty simple (and abstract) object: an abstract simplicial complex is just a subset of the integers, closed under the operation of taking subsets. This deceivingly simple object makes it possible to exactly encode the topology of any surface, no matter how complicated. To do discrete differential geometry we’ll eventually need to associate some kind of shape with a simplicial complex. But for now there are already some interesting things we can say about surfaces in the purely combinatorial setting.
最终,我们得到的是一个相当简单(且抽象)的对象:一个抽象单纯复形不过是整数的一个子集,并且在取子集的操作下是封闭的。这个看似简单的对象使得我们能够精确地编码任何曲面的拓扑,无论其多么复杂。为了进行离散微分几何,我们最终需要将某种形状与单纯复形相关联。但就目前而言,在纯粹的组合设置中,我们已经可以对曲面说一些有趣的事情。