CCG 05-01:三角网格与边长度量

本页只解决一个问题

组合网格和离散度量怎样分开,三条边怎样恢复一个三角形?

本页是原长篇讲义的单概念版本。第一次阅读只追踪本页定义的对象;看见未掌握的前置符号时,先沿链接退回,不要跳过定义硬背结论。

开始前

1. 三角剖分曲面

一个定向三角网格记为

M=(V,E,F),M=(V,E,F),

其中VV 是顶点,EE 是边,FF 是有向三角形。几何嵌入给每个顶点位置pi∈R3p_i\in\mathbb R^3。

1.1 组合结构与几何结构要分开

  • 组合结构:哪些顶点、边、面相邻;
  • 分片线性几何:每条边的长度lijl_{ij};
  • 外在嵌入:顶点在R3\mathbb R^3 中的位置。

离散内在度量只需边长,并要求每个三角形满足严格三角不等式:

lij+ljk>lki.l_{ij}+l_{jk}>l_{ki}.

同一组边长可以有不同三维折叠,但内在角度、面积和离散曲率相同。

1.2 半边结构

每条无向边拆成两个定向半边h=(i→j)h=(i\to j) 与h∗=(j→i)h^*=(j\to i)。每个半边至少记录:

origin(h) : 起点
next(h)   : 同一面中的下一条半边
twin(h)   : 反向半边;边界处可为空
face(h)   : 所属面
edge(h)   : 所属无向边

常数时间可完成:

  • 沿面循环:h -> next(h);
  • 穿过边:h -> twin(h);
  • 绕顶点:h -> twin(next(h))(具体公式随约定变化)。

2. 从边长恢复单个三角形

三角形(i,j,k)(i,j,k) 的边长记为

a=ljk,b=lki,c=lij.a=l_{jk},\quad b=l_{ki},\quad c=l_{ij}.

余弦定理:

cos⁡θi=b2+c2−a22bc.\cos\theta_i=\frac{b^2+c^2-a^2}{2bc}.

Heron 公式:

s=a+b+c2,A=s(s−a)(s−b)(s−c).s=\frac{a+b+c}{2}, \qquad A=\sqrt{s(s-a)(s-b)(s-c)}.

也可在局部二维坐标中放置

qi=(0,0),qj=(c,0),q_i=(0,0),\quad q_j=(c,0),

qk=(b2+c2−a22c,b2−xk2).q_k=\left( \frac{b^2+c^2-a^2}{2c}, \sqrt{b^2-x_k^2} \right).

所有三角形内的梯度、Jacobian 和能量都可在这个局部坐标中计算。

读完必须能回答

  1. 不看公式,用自己的话回答开头的核心问题。
  2. 指出本页最重要公式中每个符号的类型:标量、向量、矩阵、映射还是集合。
  3. 找出定理成立所需的假设,并举一个删除某条假设后可能失败的例子。
  4. 对最小例子手算一遍;若本页含代码,再比较手算与程序输出。

前后课程

返回模块目录 | 下一课:锥奇点与离散 Gauss-Bonnet