CCG 06-06:数值故障与真实模型管线
本页只解决一个问题
教学代码迁移到真实网格时,哪些数值和数据问题必须处理?
本页是原长篇讲义的单概念版本。第一次阅读只追踪本页定义的对象;看见未掌握的前置符号时,先沿链接退回,不要跳过定义硬背结论。
开始前
- 模块前置入口:先修页面
- 本页所属模块:Python 网格参数化实验
- 集中复习版:原长篇参考讲义
16. 数值问题与改进
16.1 病态矩阵
瘦长三角形使基函数梯度很大,矩阵条件数上升。检查:
- 最小角;
- 最短边/最长边比;
- 迭代求解残差;
- 锚点距离。
16.2 负余切权重
可做 intrinsic Delaunay edge flip,使
从而。注意 extrinsic 三维 Delaunay 与 intrinsic Delaunay 不是同一个概念。
16.3 LSCM 翻转
可先用 Tutte 得到无翻转初值,再最小化 symmetric Dirichlet 能量,并在线搜索中保持。这将二次一次求解升级为非线性优化,但能显式保护局部双射。
16.4 大网格
- 使用稀疏 Cholesky 或预条件 CG;
- 对多个右端项复用分解;
- 不要形成稠密;
- 以面积加权统计误差;
- 用相对残差而非只看绝对残差。
17. 从教学代码走向真实模型
真实 OBJ/PLY 流程至少需要:
- 合并重复顶点并移除零面积面;
- 统一面朝向;
- 检查非流形边/顶点;
- 提取连通分量和边界环;
- 对闭合或高亏格模型计算切图;
- 对多个 charts 做 packing;
- 在接缝两侧复制顶点并维护原始顶点对应;
- 输出纹理坐标索引,而不假设位置索引与 UV 索引相同。
18. 进一步实验
- 把圆边界换成正方形,比较边界角附近的。
- 将边界按顶点等间距与按弧长分配对比。
- 扰动一个内部顶点制造钝角,观察负余切权重与翻转。
- 改变 LSCM 锚点距离,记录条件数和残差。
- 用 analytic disk/hemisphere 构造已知共形映射,做收敛实验:网格加密时误差是否下降。
- 实现 symmetric Dirichlet + barrier,对比 LSCM。
- 在输出 UV 上计算离散 Beltrami 系数方向并画椭圆 glyph。
读完必须能回答
- 不看公式,用自己的话回答开头的核心问题。
- 指出本页最重要公式中每个符号的类型:标量、向量、矩阵、映射还是集合。
- 找出定理成立所需的假设,并举一个删除某条假设后可能失败的例子。
- 对最小例子手算一遍;若本页含代码,再比较手算与程序输出。
前后课程
许可协议:CC BY
作者:Davids
本文链接:https://hustjjd.github.io/ccg/06-06-lesson/
更新于:2026年10月12日