CCG 06-06:数值故障与真实模型管线

本页只解决一个问题

教学代码迁移到真实网格时,哪些数值和数据问题必须处理?

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

开始前

16. 数值问题与改进

16.1 病态矩阵

瘦长三角形使基函数梯度很大,矩阵条件数上升。检查:

  • 最小角;
  • 最短边/最长边比;
  • 迭代求解残差;
  • 锚点距离。

16.2 负余切权重

可做 intrinsic Delaunay edge flip,使

αij+βij≤π\alpha_{ij}+\beta_{ij}\le\pi

从而wij≥0w_{ij}\ge0。注意 extrinsic 三维 Delaunay 与 intrinsic Delaunay 不是同一个概念。

16.3 LSCM 翻转

可先用 Tutte 得到无翻转初值,再最小化 symmetric Dirichlet 能量,并在线搜索中保持det⁡Jt>0\det J_t>0。这将二次一次求解升级为非线性优化,但能显式保护局部双射。

16.4 大网格

  • 使用稀疏 Cholesky 或预条件 CG;
  • 对多个右端项复用分解;
  • 不要形成稠密ATAA^TA;
  • 以面积加权统计误差;
  • 用相对残差而非只看绝对残差。

17. 从教学代码走向真实模型

真实 OBJ/PLY 流程至少需要:

  1. 合并重复顶点并移除零面积面;
  2. 统一面朝向;
  3. 检查非流形边/顶点;
  4. 提取连通分量和边界环;
  5. 对闭合或高亏格模型计算切图;
  6. 对多个 charts 做 packing;
  7. 在接缝两侧复制顶点并维护原始顶点对应;
  8. 输出纹理坐标索引,而不假设位置索引与 UV 索引相同。

18. 进一步实验

  1. 把圆边界换成正方形,比较边界角附近的KK。
  2. 将边界按顶点等间距与按弧长分配对比。
  3. 扰动一个内部顶点制造钝角,观察负余切权重与翻转。
  4. 改变 LSCM 锚点距离,记录条件数和残差。
  5. 用 analytic disk/hemisphere 构造已知共形映射,做收敛实验:网格加密时误差是否下降。
  6. 实现 symmetric Dirichlet + barrier,对比 LSCM。
  7. 在输出 UV 上计算离散 Beltrami 系数方向并画椭圆 glyph。

读完必须能回答

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

前后课程

上一课:完整运行、结果解释与测试 | 返回模块目录