CCG 08-06:实现、诊断与算法边界
本页只解决一个问题
离散曲率流代码应监控哪些不变量,它与调和参数化有何本质差别?
本页是原长篇讲义的单概念版本。第一次阅读只追踪本页定义的对象;看见未掌握的前置符号时,先沿链接退回,不要跳过定义硬背结论。
开始前
- 模块前置入口:先修页面
- 本页所属模块:离散 Ricci 流与双曲结构
- 集中复习版:原长篇参考讲义
12. 离散曲率流伪代码
input: triangulation T, initial lengths l0, target curvature K_bar
u <- 0
fix scale gauge, e.g. sum(u) = 0
repeat:
l <- conformal_lengths(l0, u)
while T is not intrinsic Delaunay:
flip offending edge
update intrinsic length with Ptolemy relation
theta <- triangle_angles(l)
K <- angle_defects(theta)
residual <- K - K_bar
if max_abs(residual) < tolerance: break
H <- curvature_jacobian(theta) # Laplace-type Hessian
du <- solve_gauged_system(H, -residual)
step <- backtracking_line_search(u, du)
u <- u + step * du
output: conformal factor u, final intrinsic metric l, triangulation T13. 数值不变量与诊断
每次迭代至少记录:
| 量 | 应满足 |
|---|---|
| 目标曲率总和 | (含边界版本) |
| 当前曲率总和 | 数值上保持 Gauss–Bonnet |
| 最小三角不等式余量 | 严格为正 |
| 非 Delaunay 边数 | 翻边后为 0 |
| 下降至容差 | |
| 或固定点 | 满足尺度规范 |
| Hessian 最小非零特征值 | 不应异常接近 0 |
14. Ricci flow 与调和参数化的区别
| 调和/LSCM | Ricci/Yamabe flow |
|---|---|
| 直接求点的二维坐标 | 先求目标内在度量 |
| 通常是线性或二次优化 | 非线性曲率处方 |
| 边界/锚点强烈影响结果 | 目标曲率与拓扑主导 |
| 适合圆盘参数化 | 可统一球面、环面、高亏格 |
| 输出坐标 | 输出度量,之后还需 development |
15. 常见错误
- 目标曲率不满足 Gauss–Bonnet,问题根本无解。
- 忘记固定尺度,Hessian 奇异。
- 固定原三角剖分不翻边,迭代撞上三角不等式边界。
- 把角度亏损当作曲率密度;二者相差 dual area。
- Newton 不做 line search,远离解时发散。
- 得到目标度量后直接把原三维坐标当作参数坐标;仍需发展映射。
- 球面/双曲参数未做自同构归一化,比较结果会漂移。
读完必须能回答
- 不看公式,用自己的话回答开头的核心问题。
- 指出本页最重要公式中每个符号的类型:标量、向量、矩阵、映射还是集合。
- 找出定理成立所需的假设,并举一个删除某条假设后可能失败的例子。
- 对最小例子手算一遍;若本页含代码,再比较手算与程序输出。
前后课程
许可协议:CC BY
作者:Davids
本文链接:https://hustjjd.github.io/ccg/08-06-lesson/
更新于:2026年10月12日