<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>InsistentWind</title><description>个人学习与项目笔记</description><link>https://insistentwind.github.io/</link><templateTheme>Firefly</templateTheme><templateThemeVersion>6.15.6</templateThemeVersion><templateThemeUrl>https://github.com/CuteLeaf/Firefly</templateThemeUrl><lastBuildDate>2026年8月8日 21:45:49</lastBuildDate><item><title>你好，这里是我的新博客</title><link>https://insistentwind.github.io/posts/hello-world/</link><guid isPermaLink="true">https://insistentwind.github.io/posts/hello-world/</guid><description>从一套需要数据库和服务器的博客系统，迁移到简单、稳定、可以长期维护的静态站点。</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;欢迎来到我的博客。&lt;/p&gt;
&lt;p&gt;这里会记录学习中的关键问题、做项目时踩过的坑，以及那些不希望被时间冲淡的想法。比起即时、零散的信息流，我更喜欢把一件事真正想清楚，再整理成一篇可以反复查阅的文章。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;为什么重新搭建&lt;a href=&quot;#为什么重新搭建&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;原来的项目功能丰富，但同时依赖 Java 后端、MySQL、Redis 等服务。对个人博客来说，这意味着更高的部署成本，也让“写一篇文章”这件简单的事变得有些沉重。&lt;/p&gt;&lt;p&gt;现在，所有文章都以 Markdown 文件保存。每次提交代码后，GitHub 会自动完成构建和发布。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;接下来写什么&lt;a href=&quot;#接下来写什么&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;正在学习的技术主题&lt;/li&gt;
&lt;li&gt;项目复盘与解决方案&lt;/li&gt;
&lt;li&gt;有用的工具和工作流&lt;/li&gt;
&lt;li&gt;偶尔的生活记录&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;这不是一份必须完成的清单，只是一次持续记录的开始。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>数字几何处理</title><link>https://insistentwind.github.io/posts/digital-geometry-processing/</link><guid isPermaLink="true">https://insistentwind.github.io/posts/digital-geometry-processing/</guid><description>系统整理数字几何处理中离散微分算子、网格去噪、参数化、形变、修复、简化与方向场等核心方法。</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Geometric Processing&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;这是一份按课程进度整理的数字几何处理笔记，内容覆盖几何表示与网格数据结构、离散微分算子、网格去噪、参数化、几何形变、模型修复、曲面映射、网格简化、方向场以及 Delaunay 三角剖分。正文保留了课堂推导、论文方法、实验现象和作业实现记录，并按主题重新梳理了标题层级，方便后续查阅和补充。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;2-25 · 几何表示与网格数据结构&lt;a href=&quot;#2-25--几何表示与网格数据结构&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251003195301953.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;点云&lt;a href=&quot;#点云&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;有符号距离场&lt;a href=&quot;#有符号距离场&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251003201105535.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004003241910.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;隐式函数&lt;a href=&quot;#隐式函数&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004003422816.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;空间网格与层次结构&lt;a href=&quot;#空间网格与层次结构&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;四叉树，八叉树-hierarchy结构&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004003939841.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;如何构造数据结构呢？
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004004015492.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;对立方体八叉树的一个优化：&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004004455342.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;用平面对曲面进行逼近，如果逼近程度已经很好了，就不用继续细分了。得到的是一些平面的块？意思是直接用平面逼近曲面
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004004844646.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;三角网格表示&lt;a href=&quot;#三角网格表示&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004005045435.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004005346091.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h4&gt;作业 1&lt;a href=&quot;#作业-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004005527640.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004005918121.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;流形&lt;a href=&quot;#流形&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004010651215.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004010954901.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;半边结构&lt;a href=&quot;#半边结构&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004011839866.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;OFF格式
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004013023075.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004013033702.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2-28 · 离散微分几何&lt;a href=&quot;#2-28--离散微分几何&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;离散几何
目标：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004144226032.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004144335725.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004144711757.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004145331717.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h4&gt;思考&lt;a href=&quot;#思考&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004145740535.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;法向&lt;a href=&quot;#法向&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004145805988.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;梯度离散化&lt;a href=&quot;#梯度离散化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004150326442.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;计算梯度
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004150606676.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004151008558.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004151231438.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;可以看到这个梯度的值和x的值是无关的，也就是每个三角形面中的梯度都是一样的constant，f(x)是一个线性函数&lt;/p&gt;&lt;section&gt;&lt;h4&gt;思考&lt;a href=&quot;#思考-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004152006460.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;怎么求：把xj - xk和三角形的法向量做一个叉乘就可以了&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;拉普拉斯算子&lt;a href=&quot;#拉普拉斯算子&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004152936020.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004153159213.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;每个三角形内部的梯度是一个constant，而每个顶点所连接的三角形的梯度是不一样的，因此可以对顶点求梯度的梯度&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004153733870.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004154111584.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;均匀 Laplace 算子&lt;a href=&quot;#均匀-laplace-算子&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004155357875.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;余切 Laplace 算子&lt;a href=&quot;#余切-laplace-算子&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004155848412.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;利用格林公式，把面积分转化为线积分&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004160247086.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;知道为什么是除以4了，因为有一个除以2是求得。蓝色区域的面积，而不是某一个点的一阶邻域的总面积。
那么余切是怎么来的：上面（xi-xk）&lt;em&gt;(xj-xk)点乘是cos，而下面的AT是1/2&lt;/em&gt;a&lt;em&gt;b&lt;/em&gt; sin(),上下一比就是cot
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004161207012.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004161432169.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004161534903.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;公式里有两部分的cot，是因为一条边可能对应的是两个三角形的cot&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;高斯曲率&lt;a href=&quot;#高斯曲率&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;平均曲率就是（最大曲率加上最小曲率）/2,H是这个点的平均曲率,两个主曲率除以2，δx就是算出来的离散拉普拉斯算子&lt;/p&gt;&lt;p&gt;高斯曲率是主曲率相乘(k1 * k2)，平均曲率是相加除以2(k1 + k2) / 2&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004162321204.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004162701089.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3-03 · 网格去噪与频谱处理&lt;a href=&quot;#3-03--网格去噪与频谱处理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;网格去噪
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004190000293.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;如何分辨feature 和 noise&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004190237401.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;基于滤波的方法&lt;a href=&quot;#基于滤波的方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004191154789.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;空间和时间的离散：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004191439157.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;时间上：由于上面给出的扩散方程，所以下面这个式子成立&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004192043888.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004192106594.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004192251608.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;曲率和laplace转换公式的条件：需要时cot权重
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251009160103216.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004192458800.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;uniform的laplace不满足线性LIN性质的，因为他是把每个点都移动到了一阶邻域的中心&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;网格光顺（Fairing）&lt;a href=&quot;#网格光顺fairing&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004193713675.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;高斯滤波&lt;a href=&quot;#高斯滤波&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004194153622.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;这个Kp是为了实现一个归一化，Ws权值归一化把p和q是度量两点之间的距离权重&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004195135614.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;不能保边缘&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004195544682.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;解决方法：双边滤波，多了一个对于颜色跳变权重的度量，考虑颜色上的相似性
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004195702494.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;加入对颜色跳变的估计
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004195836433.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;如何把这个对像素的处理，推广到对网格上的处理？，高度 + 距离&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004200215716.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;去找一个顶点，找到法向，做一个切平面，对一阶邻域中的点求出高度，作为双边滤波中，二维像素的灰度值&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004200333639.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;类比于对图像处理的ws，wr&lt;/p&gt;&lt;section&gt;&lt;h4&gt;作业&lt;a href=&quot;#作业&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004200530022.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;1.法线，2.保体积。如何在空间中包体积？答案：联立原点&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;法向滤波与顶点位置恢复&lt;a href=&quot;#法向滤波与顶点位置恢复&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;那直接对曲面上的点的法向量做处理，然后对点的位置进行恢复，这样会很不精准。
因此，想要从别的信号恢复点的位置，瞄准了三角形的法向量是无歧义的，从这个法向量进行恢复&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004201610333.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251010221332821.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;这样可以算出来新的法向量，更加自然&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004202127415.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h4&gt;作业3&lt;a href=&quot;#作业3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;先基于双边滤波恢复出平面的法向，再根据法向找出恢复后的顶点&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004202457020.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;恢复顶点位置：采用迭代的方法
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004202520947.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;每次只动一个顶点，求一次导数等于0，找到最小值估计。保体积。用这个式子更新顶点位置&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;公式推导&lt;a href=&quot;#公式推导&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004202616827.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;效果：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004203247954.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;傅里叶变换&lt;a href=&quot;#傅里叶变换&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004203740629.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;本质是空域和时域之间的转化&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004203919416.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;如何推广到二维流形曲面？
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004204200381.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004204331385.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;效果：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251004204506455.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3-06 · 优化与数据驱动的网格平滑&lt;a href=&quot;#3-06--优化与数据驱动的网格平滑&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Optimization-based methods，基于优化的方法&lt;/p&gt;&lt;p&gt;找一个最大的flat rigion？&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251009223909730.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h4&gt;相关论文&lt;a href=&quot;#相关论文&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251009223947869.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;效果：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011185848523.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;技术实现&lt;a href=&quot;#技术实现&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011185922933.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;要使输出和输入之间的距离最小，然后输出的梯度为0&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011191231332.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;beta是自己设置的，需要逐渐变大&lt;/p&gt;&lt;p&gt;为什么1方法会存在解析解？
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011191247127.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011192224558.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;得到一种分片，某种颜色比较光滑的结果&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;推广到三角网格&lt;a href=&quot;#推广到三角网格&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011192714408.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;怎么做？
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011192723316.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011192910701.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;cotangent laplace效果不好的原因是 他没有把flat rigion给抹平&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011192954852.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;如何推广定义一条边的laplace算子？
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011193746111.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011193801436.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011193836966.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011194149236.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;基于面积的边算子&lt;a href=&quot;#基于面积的边算子&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011194243191.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;问题：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011194640751.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h4&gt;相关论文&lt;a href=&quot;#相关论文-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011231235697.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011232614912.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;基于数据驱动的方法&lt;a href=&quot;#基于数据驱动的方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;data-driven methods&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011233455483.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011233709882.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011234423316.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011234819595.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;通过拟合函数自适应地去找一个合适的结果,找s，r，k&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011234945491.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011235207981.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011235247073.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011235318503.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h4&gt;延伸阅读&lt;a href=&quot;#延伸阅读&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011235550681.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3-10 · 网格参数化&lt;a href=&quot;#3-10--网格参数化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;网格参数化&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012160515351.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012160832782.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;有什么用？
作用：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012161919368.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;网格化简之后，希望保留原始网格上的一些特征。例如褶皱等的信息，如何拿到这些信息，通常是需要存储稠密网格上的法向信息。两种网格同时进行参数化，渲染稀疏网格的时候，可以取到稠密网格上的normal。normal上会有变化&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012162229783.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;1.不能有自交，2. 两个三角形有交集，那么在参数区域中要么有一个相同的边，点或者为空。不可能相交区域是一个平面区域（这种肯定有自交）&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012162751430.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;inversion-free，只要求法向方向一致就行，不要求自交。要求无翻转&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012163238876.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;局部双射
只要这些一阶邻域角度之和小于2π就可以满足local injective了&lt;/p&gt;&lt;p&gt;另一个条件
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012163409975.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;参数化方法&lt;a href=&quot;#参数化方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Tutte 重心映射&lt;a href=&quot;#tutte-重心映射&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;section&gt;&lt;h4&gt;作业&lt;a href=&quot;#作业-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012164245919.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;理论：如果边界顶点有序地落在凸多边形上，内部的顶点是他的邻居的线性组合，那么这样的参数化坐标就是双射的&lt;/p&gt;&lt;p&gt;不能是封闭的网格，要和圆盘同胚，也就是openmesh&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012164619981.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;条件：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012165309642.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012165941326.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;LSCM&lt;a href=&quot;#lscm&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;不能保证双射和不自交&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012170219233.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012171335222.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;conformal-》保角&lt;/p&gt;&lt;p&gt;在每个输入的三角形网格建立一个局部的坐标系&lt;/p&gt;&lt;p&gt;这个工作的目标：是找一套uv坐标，使得空间三角网格映射到二维坐标上的畸变程度最小&lt;/p&gt;&lt;p&gt;参数化坐标（u，v）是定义在三角形网格上的一个函数，也就是一个分片线性函数&lt;/p&gt;&lt;p&gt;由于中心坐标表达，三角形上每个点的位置都可以有三个顶点的重心坐标公式表示出来，因此是线性的&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012172422355.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012172755941.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;把uv映射看成函数，ui = u（x），由于三角形中心坐标那里，可以得出u的梯度&lt;/p&gt;&lt;p&gt;要使这个连续函数是一个相似变换：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012173532310.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;
scale 乘上一个旋转矩阵？这是目标，找出共性变换的&lt;/p&gt;&lt;p&gt;由于3D曲面有高斯曲率（比如一个球帽），想把它完美地无畸变地摊平成平面是不可能的（除非把它撕开）。&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012173651662.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ABF&lt;a href=&quot;#abf&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Angle-Based flattening&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012191438529.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;约束：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012192153422.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;最后一个约束，为了保证最后一个三角形放进来之后可以使得整个曲面合得上，所以根据正弦定理，可以得到这个约束式子&lt;/p&gt;&lt;p&gt;这个式子的理论基础是正弦定理：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251013155642704.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;推导&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251013155907882.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;非线性等式约束，不是很好解&lt;/p&gt;&lt;p&gt;解决方案：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012193120954.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012193311039.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012193704455.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012193938103.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012194148209.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012194706953.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3-13 · ARAP 参数化&lt;a href=&quot;#3-13--arap-参数化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251013164840855.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;ARAP参数化&lt;a href=&quot;#arap参数化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251013165340428.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;变形类型
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251013165552513.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251013165915093.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251013170120898.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Local/Global 求解&lt;a href=&quot;#localglobal-求解&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251013173730149.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;为什么能收敛：&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251014231934776.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;每次求解，Jt到Lt的距离都在减少，能量方程是单调下降的，所以是收敛的&lt;/p&gt;&lt;section&gt;&lt;h4&gt;Local 步骤（作业 5）&lt;a href=&quot;#local-步骤作业-5&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;给定Jt 去求 Lt，给定jacob矩阵，去求旋转矩阵&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251014231634587.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;输入：作业4的输入&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251014232943829.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;相关论文&lt;a href=&quot;#相关论文-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251014233015439.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;思路：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251014234311250.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;效果：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251014234255488.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;优化：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251014234756693.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;几何形变概述&lt;a href=&quot;#几何形变概述&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251015000228293.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;H：用户操纵的形变，部分顶点上的位移，用户输入的值
F：displacement = 0；没有位移
S：其余的区域&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251015000437776.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;形变区域与约束&lt;a href=&quot;#形变区域与约束&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251015001141541.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3-17 · 网格形变与形变迁移&lt;a href=&quot;#3-17--网格形变与形变迁移&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;回顾：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018214850028.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;如何计算变形：扩散下去&lt;/p&gt;&lt;section&gt;&lt;h3&gt;基于传播的方法（Propagation Based）&lt;a href=&quot;#基于传播的方法propagation-based&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018214952443.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018215903913.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;黑色红色线是等值线，怎么算扩散？&lt;/p&gt;&lt;p&gt;从handle(1)到fix(0)，中间的变形区域设为s，那么如何计算s。实际上变形区域内部的点就是x = x + s * displacement(位移，绿色那部分的位移)
方法：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018215926798.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;线性差值距离。&lt;/p&gt;&lt;p&gt;方法2：直接解出来s，通过laplace矩阵。R上面的那些顶点相当于是变量，H上设置为1？
接一个laplace方程，上面矩阵保证顶点关系，多出来的约束用做是变形后的顶点的位置？
接出来的应该是s（距离值吧），那就把变形对应的点右侧b设置为1，其他都是0，然后解出来这个矩阵方程，得到的每个点的解就应该是距离handle那一圈的距离s的值&lt;/p&gt;&lt;p&gt;问题：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018221735976.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;这里中间不能保证是大于1的，会往下凹。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;多尺度方法（Multi-Scale Based）&lt;a href=&quot;#多尺度方法multi-scale-based&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;多尺度的方法&lt;/p&gt;&lt;p&gt;分成两（或者多）个频率带，一个是低频的，一个是高频的。直接把两个部分分开，把低频部分做一个deform，然后直接把高频部分加回来。因为高频部分可能会有一些细节，对低频部分做一个操作，细节比较少。高频加回来之后细节扭曲比较少&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018222317363.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018222755273.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;步骤：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018222925600.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;如何表示这个滤波：
base就是滤波光滑后网格顶点位置，h（details）是每个顶点上的displacement（位移）&lt;/p&gt;&lt;p&gt;hi不是正常的在三维空间中的表示，而是用局部的标准正交基构成的，local frame，ni是base曲面的法向量，ti1，ti2是垂直于ni的两个向量&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018224047867.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;alpha beta gamma三个数字是不变的&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018224106042.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;微分坐标（Differential Coordinates）&lt;a href=&quot;#微分坐标differential-coordinates&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;基于微分坐标&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018225833645.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;先恢复出来微分坐标（梯度或者laplace）&lt;/p&gt;&lt;p&gt;过程是：先计算出来原始曲面的梯度，然后根据这个梯度去恢复出来变形后的曲面的位置&lt;/p&gt;&lt;p&gt;步骤：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018231330792.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018231415184.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018231619409.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;如何算这个Mi呢？相当于用户操作的形变的表达&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018233525609.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;Mi一开始由用户给定，现在的问题变成如何把Mi从一开始扩散到网格外面&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018233805370.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;这是一个默认的好用的方法：直接对r和s进行差值&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018235612802.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;对平移的敏感程度不好&lt;/p&gt;&lt;p&gt;下面这个方法是点变换的同时对rotation矩阵Mi持续优化&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251018235956609.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251019000057723.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;形变迁移（Deformation Transfer）&lt;a href=&quot;#形变迁移deformation-transfer&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;变形参考，把马的变形转移到骆驼上去，对比着transfer，有相似的变形量
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251019000721728.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;第一步要算出来deformation的表示&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251019152257250.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;只有三个点的话是不足以算出来3个点的仿射变换的，所以在空间中加一个v4
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251019152535993.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251019203223051.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ARAP 去噪&lt;a href=&quot;#arap-去噪&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251019205818814.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;希望：变形后的那个向量和变形前的那个向量只经过一个旋转&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251019210318841.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251019210558951.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251019210813231.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;这个第一个式子，因为前后两项跟变量Ri没有关系，Ri是local中要求的旋转矩阵，所以直接不考虑，只考虑带有Ri的项。
矩阵的迹是一个数字，它等于主对角线上所有元素的和。所以第二行可以这么写。&lt;/p&gt;&lt;p&gt;想象一下(1, 2, 3) * (1, 2, 3)T 是一个数字，把它转置一下就是(1, 2, 3)T * (1, 2, 3),这是一个矩阵，迹就是原来的数字&lt;/p&gt;&lt;p&gt;课堂小测：推导
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251019211643752.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251019212226615.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3-20 · 空间形变与重心坐标&lt;a href=&quot;#3-20--空间形变与重心坐标&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;25-10-27&lt;/p&gt;&lt;p&gt;变形前后的三角形之间的连接关系没有改变，改变的只有顶点的位置xyz&lt;/p&gt;&lt;section&gt;&lt;h3&gt;空间形变&lt;a href=&quot;#空间形变&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251027220340479.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251027220603822.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251027221106314.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251027221125603.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251027221255143.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;基于笼的自由形变&lt;a href=&quot;#基于笼的自由形变&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251027221459405.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;Cl是网格的控制顶点，φl是第l个顶点的基函数，这个奇函数在l上pi那一点的取值&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251027223911472.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;问题：&lt;a href=&quot;#问题&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251028222527141.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;重心坐标&lt;a href=&quot;#重心坐标&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;section&gt;&lt;h4&gt;课堂小测：证明&lt;a href=&quot;#课堂小测证明&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251028222650950.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;一般型的重心坐标
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251028224835630.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;性质&lt;a href=&quot;#性质&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251028225625611.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251028225737658.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251028230423245.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251028231445625.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;问题&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251028231211519.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;拿到λ和μ&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251028231805459.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;证明λ和μ就是中心点的坐标，构造出来λ和μ，自然也就满足GBC的性质&lt;/p&gt;&lt;p&gt;因为左边那个式子加起来等于1，所以 x = () * x，然后分离变量得到右侧为0的式子&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251028232434398.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251028232608574.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;求解过程中比较快，基函数形式不变，只需要处理网格顶点位置，deformation通过这个函数传入到内部就可以完成对应变形。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3-24 · 广义重心坐标&lt;a href=&quot;#3-24--广义重心坐标&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;均值坐标（Mean Value Coordinates）&lt;a href=&quot;#均值坐标mean-value-coordinates&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;坐标推导&lt;a href=&quot;#坐标推导&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030162809572.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;条件：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030164126252.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;证明：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030164259192.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h4&gt;课堂小测&lt;a href=&quot;#课堂小测&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;theta可以任意定义？在圆上一角度？&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;和差化积&lt;a href=&quot;#和差化积&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030164613848.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030164754779.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;坐标是怎么来的：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030170325970.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;利用 这个重心坐标去逼近一个分片线性函数&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030213202643.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030220013382.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030220110725.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;如果满足平均值定理，那么UT就是这样一种形式&lt;/p&gt;&lt;p&gt;公式以及证明：&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030220542528.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030221222809.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;f(v)是由这个重心坐标公式得到的&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030221718204.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;接下来证明这个一段圆弧上的积分式子，可以满足1/2pi*r这样一种形式&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030222055380.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;局部平均值定理和调和函数是不一样的&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;作业7&lt;a href=&quot;#作业7&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;实现平均值坐标的参数化，把tuttes 权值换一下，角度直接拿R3空间中的角度&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030224141257.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;效果&lt;a href=&quot;#效果&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;坐标权重效果&lt;a href=&quot;#坐标权重效果&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030224340939.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;负数角度解决方法：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030224709049.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Harmonic Coordinates&lt;a href=&quot;#harmonic-coordinates&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;harmonic 调和坐标&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251030233905383.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;学思路：层次结构/多分辨率结构，从下往上迭代，为了在求解过程中及早得陷入一个局部最小。&lt;/p&gt;&lt;section&gt;&lt;h4&gt;书本：&lt;a href=&quot;#书本&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;polygon mesh processing A3 187页求解大规模稀疏方程组，A33是multi grid 也就是分辨率加速&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251104234649956.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251104234819966.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251104234954202.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251104235248461.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251104235442212.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251105000022528.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251105000050307.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;什么是解析函数？&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;文章&lt;a href=&quot;#文章&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251105000613347.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Bounded Biharmonic Weights&lt;a href=&quot;#bounded-biharmonic-weights&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;什么是实时的？如果要解一个方程那就肯定不是实时的，而基于这种wij，或者linear blend skinning的方式，算是实时的，速度快&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251105001049926.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;三类形变控制方式&lt;a href=&quot;#三类形变控制方式&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251105001636768.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251105001840619.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h4&gt;Bone、Cage 与 Handle&lt;a href=&quot;#bonecage-与-handle&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251105002054482.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251105002108506.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;怎么构造weights？
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251105002122451.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;reproduction是啥？&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251105002338866.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;他不是一个bycentric coordinate&lt;/p&gt;&lt;p&gt;约束到0-1之间，就是bound&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251105002536221.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;bihormanic是什么意思&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3-27 · 几何修复&lt;a href=&quot;#3-27--几何修复&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;11-10&lt;/p&gt;&lt;section&gt;&lt;h3&gt;修复问题分类&lt;a href=&quot;#修复问题分类&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251110233335818.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251110233950905.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251110234245897.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251110235354075.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h4&gt;孤立点&lt;a href=&quot;#孤立点&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111000100157.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111000208576.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111000544671.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;拓扑噪声：&lt;a href=&quot;#拓扑噪声&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111000740416.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;朝向&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111001219592.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;曲面孔洞&lt;a href=&quot;#曲面孔洞&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111001545889.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111001934676.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;缝隙&lt;a href=&quot;#缝隙&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111002210374.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;退化单元&lt;a href=&quot;#退化单元&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111002643192.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;自相交&lt;a href=&quot;#自相交&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111003133795.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;特征丢失&lt;a href=&quot;#特征丢失&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111003715782.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;数据噪声&lt;a href=&quot;#数据噪声&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111003932215.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111004109460.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111004205337.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111223539889.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111223713372.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3-31 · 网格缺陷、嵌入与映射&lt;a href=&quot;#3-31--网格缺陷嵌入与映射&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111224724175.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111225048989.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;经常出现的数据类型&lt;a href=&quot;#经常出现的数据类型&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;section&gt;&lt;h4&gt;重叠（Overlap）&lt;a href=&quot;#重叠overlap&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111232230376.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111233158684.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;三角网格之间的连接关系没有定义好&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111233211914.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111233507032.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111233752086.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;质量比较差的三角形网格&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111234524821.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;修复方法&lt;a href=&quot;#修复方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251111235248459.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251112000553951.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;法向处理&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251112000636499.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;补洞&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251112000931131.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251112001404339.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251112001643607.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;合缝&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251112001927507.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251112002117691.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;拓扑简化&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251112002129806.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;找到环丙-切开网格，补上洞&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;嵌入&lt;a href=&quot;#嵌入&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251113224341252.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;嵌入到体素会出现的问题：&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251113225156218.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;解决方法：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251113225951757.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251113230241176.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;映射&lt;a href=&quot;#映射&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251113231654461.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251113231825526.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251113231920621.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251113232357315.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;度量&lt;a href=&quot;#度量&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251113233012080.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251113233205939.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4-03 · 无翻转参数化与局部投影&lt;a href=&quot;#4-03--无翻转参数化与局部投影&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251121164924612.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;
希望参数化中的三角形不发生翻转&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251121165849083.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;这里可以看到，要想让能量值取得最小，那么这个函数的最小值就在conformal这里取到了（保角映射）&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251130231926263.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;优势&lt;a href=&quot;#优势&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251130232105143.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251130232906621.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201001357188.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201171717400.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;要取得的是黄色圆盘的外部
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201171831545.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201171945364.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h4&gt;作业：&lt;a href=&quot;#作业-3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201172021604.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;投影方法&lt;a href=&quot;#投影方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201172248893.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201173438264.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201174110516.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201184243013.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h4&gt;如何投影&lt;a href=&quot;#如何投影&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;把jacob投影到Hi空间之中&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201190017301.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;收敛性比较差&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201190131608.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;能量下降比较快：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201190256663.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201191407982.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201191445397.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201192449636.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201192507480.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251201192952120.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;直接把jacob矩阵作为优化目标，可以永远不出这个space，满足这个二次的assemble的约束，也就是那个放射变换矩阵，满足边那些&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251221000601410.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4-07 · PolyCube 参数化&lt;a href=&quot;#4-07--polycube-参数化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;12- 21&lt;/p&gt;&lt;section&gt;&lt;h3&gt;PolyCube&lt;a href=&quot;#polycube&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251221230649154.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;定义就是横平竖直的，边界的那个法向量要和轴对齐，轴有6个方向那种&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251221232550473.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251221232913506.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h4&gt;PolyCube 基本概念&lt;a href=&quot;#polycube-基本概念&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251221233019030.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251221233531162.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;PolyCube 生成方法&lt;a href=&quot;#polycube-生成方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251221233704911.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;流程&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251221233818580.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251221234030739.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251221234338477.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;把表面上的顶点旋转矩阵扩散到内部&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222000012137.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222000315347.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222000354955.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222000619582.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;基于体素的方法&lt;a href=&quot;#基于体素的方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222000936808.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;人为地搭建出来一个polycube&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222002042058.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222002804195.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;新的方式：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222002746787.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222003037317.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222003045809.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222003542499.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222003838880.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222003940952.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;先把多边形网格反映射回到rotation-dirven模型上，再头回到原始网格上进行mapping&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222004210642.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;条件：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222004335928.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222004504756.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;基于聚类的方法&lt;a href=&quot;#基于聚类的方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222004727523.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222005153872.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222005333643.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222005408096.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222005625778.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;复数角&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222005810228.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;欧拉角&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222010056038.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222010122519.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222010217405.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222010250222.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4-10 · 曲面映射&lt;a href=&quot;#4-10--曲面映射&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;曲面映射问题&lt;a href=&quot;#曲面映射问题&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222110012380.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;构造polycube和原始输入模型之间的映射&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222110309848.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;连接关系，顶点个数，三角形个数一样，顶点位置不一样，这不一定是双射的，比如说有个三角形退化了或者自交&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222111006948.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222112242198.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;算法：&lt;a href=&quot;#算法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;section&gt;&lt;h4&gt;公共基础域（Common Base Domain）&lt;a href=&quot;#公共基础域common-base-domain&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222203850192.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222204240434.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222204337610.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222204607562.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;算法缺陷&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222205137586.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;构造优化：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222205146880.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222205202270.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;基于参数化的方法：&lt;a href=&quot;#基于参数化的方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222205441504.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;沿着landing mark 切开，参数化后边界对应&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222205946830.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222210345510.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;为什么locally injective就足够了？
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222210820977.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222210919303.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;解决cut问题：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251222211526074.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4-14 · 几何渐变与点集配准&lt;a href=&quot;#4-14--几何渐变与点集配准&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;几何渐变（Morphing）&lt;a href=&quot;#几何渐变morphing&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251223183751244.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;形状差值的过程&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251223183954537.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;要求是compatible meshes，就是顶点个数和连接关系是一样的，只不过顶点位置不一样&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;作业9&lt;a href=&quot;#作业9&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;实现morphing&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;性质：&lt;a href=&quot;#性质-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251223185055353.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251223190426422.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h4&gt;方法1&lt;a href=&quot;#方法1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260118222818315.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;边长，二面角，三角形到原点的体积，或者面积做一个插值&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251223191446648.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251223191950028.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ARAP插值&lt;a href=&quot;#arap插值&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260118225626027.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;效果：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260118233430924.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260118233521713.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;输入：compatible input output meshes&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;数据驱动方法&lt;a href=&quot;#数据驱动方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260118235219512.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;找到最短路径，直接进行一个arap
&lt;strong&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260118235339688.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;点集配准&lt;a href=&quot;#点集配准&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260118235445195.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260119000301648.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260119000415987.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260119000435094.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260119000554939.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260119000851290.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260119000939276.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260119001052581.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260119001137593.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260119001238979.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260119001245944.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4-17 · Atlas 生成、网格切割与双射&lt;a href=&quot;#4-17--atlas-生成网格切割与双射&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;Atlas 生成&lt;a href=&quot;#atlas-生成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;什么是Atlas genertaion？
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260119234141882.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;纹理和obj对应&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260119234423115.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260119234955214.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260119235326613.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;一个缝对应的两块之间缝合后的颜色不一致性问题&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260119235619802.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260119235831600.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260120000057765.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260120000402422.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;应用：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260120000425725.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;网格切割方法&lt;a href=&quot;#网格切割方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260120001300059.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;point to path文章：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260120001429456.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260120002314398.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;基于segmentation方法：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260120002327689.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260120002634905.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260120002906091.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Bijection&lt;a href=&quot;#bijection&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130212058253.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130212318198.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;scaffold(脚手架方法)&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130212348068.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4-21 · Atlas 分解、装箱与畸变优化&lt;a href=&quot;#4-21--atlas-分解装箱与畸变优化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Chart packing&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130215006869.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;方法1：axis-aligned structure&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130215139615.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130215211797.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130215248174.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;pipeline：&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130215414712.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;轴向形变&lt;a href=&quot;#轴向形变&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130215514049.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;分解与装箱&lt;a href=&quot;#分解与装箱&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130215537115.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130215636059.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;畸变优化&lt;a href=&quot;#畸变优化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130215938327.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;altas 完结&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;网格简化&lt;a href=&quot;#网格简化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;简化目标&lt;a href=&quot;#简化目标&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130221254165.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;基本定义&lt;a href=&quot;#基本定义&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130221406863.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130221544546.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;局部操作&lt;a href=&quot;#局部操作&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130222054580.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130222145164.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130222342616.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130222626224.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;二次误差度量（QEM）&lt;a href=&quot;#二次误差度量qem&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;二次误差度量&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130223029331.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130223541750.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130223648740.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130223844009.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;作业9：&lt;a href=&quot;#作业9-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;如果得到的quadratic矩阵不是满秩的，那就直接用v1v2这条边的中点来代替，最小化顶点应该也在这条边上&lt;/p&gt;&lt;p&gt;把error放到最小堆里，然后每次把cost最小的边拿出来。每次更新后都要更新涉及到更新的边的cost，新顶点的cost‘就继承到了原来的那个Q矩阵&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130225520017.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;书上115页求解最优解&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;VSA&lt;a href=&quot;#vsa&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130231614679.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130231750084.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;把网格分割得到region，每个region用平面去逼近&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130232002629.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130232009791.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130232230079.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260130232430272.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4-24 · 球面参数化&lt;a href=&quot;#4-24--球面参数化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;球面参数化问题&lt;a href=&quot;#球面参数化问题&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;把一个亏格为0的映射到一个球面上&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260131002759506.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;应用：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260131002847623.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260131003938509.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;challenge：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260131224446706.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;如何实现球面参数化：&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260131224701519.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;层次化方法&lt;a href=&quot;#层次化方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260131224752969.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260131225213494.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h4&gt;简化过程&lt;a href=&quot;#简化过程&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260131231048100.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;网格细化&lt;a href=&quot;#网格细化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260131231352334.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260131232138287.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260131232217697.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260131232820077.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260131232902854.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260131233038108.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4-28 · 方向场&lt;a href=&quot;#4-28--方向场&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;方向场定义&lt;a href=&quot;#方向场定义&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;定义&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260131234838258.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;方向场中，每个方向都相差90°？&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260131235721757.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201000329384.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201000905165.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201001108170.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;作业10&lt;a href=&quot;#作业10&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201001207801.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201001659519.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201001706648.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201001932192.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;离散化&lt;a href=&quot;#离散化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;section&gt;&lt;h4&gt;切空间&lt;a href=&quot;#切空间&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201002334541.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;联络每个三角形面片的方向场，去做一个比较：这里是把法向方向一致，这样就可以比较了&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201224209460.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201225011159.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;p点是奇异点：p点这个地方没有明确定义方向的朝向&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201225452867.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;index=0就是非奇异点，=1是奇异点&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201225935057.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201230358452.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201230837726.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201230959845.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201231242683.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201231359840.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;方向场表示&lt;a href=&quot;#方向场表示&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;方向场的表示：&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201231955423.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201232422015.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201232544114.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;三角函数
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201232651165.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;作业&lt;a href=&quot;#作业-4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260201232702671.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;5-08 · 方向场约束与可积性&lt;a href=&quot;#5-08--方向场约束与可积性&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260202233632321.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;基本性质&lt;a href=&quot;#基本性质&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260202233715244.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260202233807649.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260202234155583.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;约束&lt;a href=&quot;#约束&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;对齐&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260203000714863.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;对称&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260203000725946.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260203000848272.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260203000854808.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;可积场&lt;a href=&quot;#可积场&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260203001006997.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;参数化的梯度可以看做是两个分离的向量场&lt;/p&gt;&lt;section&gt;&lt;h4&gt;课堂小测&lt;a href=&quot;#课堂小测-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260203001715646.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;证明为什么两个面的梯度，与中间边e的内积，是相等的&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260203003248377.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;设计无旋场&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260203003454974.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260203003652226.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;标架场（Frame Field）&lt;a href=&quot;#标架场frame-field&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260203004442957.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;这个polar decomposition 把frame filed转为cross filed 通过向量的形式&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260203004531085.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260203004844081.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260203005058850.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Delaunay 三角剖分&lt;a href=&quot;#delaunay-三角剖分&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429143905492.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;凸包&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429144115449.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429145337531.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429145440945.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Delaunay 条件&lt;a href=&quot;#delaunay-条件&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429145538484.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;生成方法&lt;a href=&quot;#生成方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429150432088.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429150722114.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;proof：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429151604562.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429151728918.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429152522632.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429153008421.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;全部点都做一遍flip？&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429153259987.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;最大化最小角
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429154446014.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429160350327.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;直接比角度，去代替做外接圆看另一个点是不是在外接圆外&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;最优 Delaunay 三角剖分&lt;a href=&quot;#最优-delaunay-三角剖分&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429160447720.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;这里会动这个顶点位置&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429160725784.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429164708106.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20260429165720205.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;作业与实现记录&lt;a href=&quot;#作业与实现记录&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;配置qt环境，运行报错：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;qt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;qpa&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;plugin&lt;/span&gt;&lt;span&gt;: Could &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; find the Qt platform plugin &lt;/span&gt;&lt;span&gt;&quot;windows&quot;&lt;/span&gt;&lt;span&gt; in &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt; This application failed to start because no Qt platform plugin could be &lt;/span&gt;&lt;span&gt;initialized&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;Reinstalling&lt;/span&gt;&lt;span&gt; the application may fix &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt; problem.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;找不到platform，可能是因为环境变量目录没有设置正确，设置到bin目录可以运行成功&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;E:\Qt\&lt;/span&gt;&lt;span&gt;6.9.3&lt;/span&gt;&lt;span&gt;\msvc2022_64\bin&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251010233754126.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;很有用的方法（上面的图）&lt;a href=&quot;#很有用的方法上面的图&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;求中间变量，再求目标变量&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;作业3&lt;a href=&quot;#作业3-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251011162719672.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;对于rock这个obj，如果不加这两行处理，会导致部分曲面无法显示&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;你没对向量归一化，dot(a,b) 可能远大于 1。sqrt(1 - cos^2) 里出现负数 → NaN 或极小值，cot = cos / sin 爆炸，顶点位移失控，面退化。&lt;/li&gt;
&lt;li&gt;加 std::min(…,0.9) 把过大的 dot 强行压到 0.9，避免 1 - cos^2 变成负数或极小，数值不再爆炸，所以“好了”。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;作业4&lt;a href=&quot;#作业4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;边界点没有按照边界的拓扑顺序排序，导致参数化之后，连接三角面时开始交叉&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012225318221.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;如何找边界点的拓扑顺序呢？
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251012234931879.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&lt;span&gt;auto&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; v : &lt;/span&gt;&lt;span&gt;mesh&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;vertices&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;boundary_index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; // 重置&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 遍历所有边界半边，标记边界顶点的 boundary_index&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 按拓扑顺序遍历边界环** 很重要&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; boundary_size &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;          // 总边界顶点数&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; boundary_cycle &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;         // 边界环个数&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;std::unordered_set&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;geometry::HalfEdge&lt;/span&gt;&lt;span&gt;*&amp;gt;&lt;/span&gt;&lt;span&gt; visitedBoundaryHE;&lt;/span&gt;&lt;span&gt;// 访问过的边界半边&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 遍历所有半边，找到边界半边&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&lt;span&gt;auto&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; hePtr : &lt;/span&gt;&lt;span&gt;mesh&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;halfEdges&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;geometry::HalfEdge&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; start &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hePtr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;pair&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;// 不是边界半边&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;visitedBoundaryHE&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;count&lt;/span&gt;&lt;span&gt;(start)) &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;// 如果遍历过了，就跳过&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;geometry::HalfEdge&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; he &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; start;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; step &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;visitedBoundaryHE&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;insert&lt;/span&gt;&lt;span&gt;(he);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;geometry::Vertex&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;he&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;vertex&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;boundary_index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;boundary_index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; boundary_size&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; // 从 0 开始递增&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// 跳到下一条边界半边&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;geometry::HalfEdge&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; candidate &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;he&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; (candidate &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;candidate&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;pair&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;candidate &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;candidate&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;pair&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;he &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; candidate;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;step&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (step &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;mesh&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;halfEdges&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;span&gt; // 安全退出：异常拓扑&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;std::cerr &lt;/span&gt;&lt;span&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Warning: boundary walk aborted (non-manifold?)&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span&gt; std::endl;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; (he &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; he &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; start);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;boundary_cycle&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;std::cout &lt;/span&gt;&lt;span&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Boundary cycles: &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span&gt; boundary_cycle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; boundary vertices: &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span&gt; boundary_size &lt;/span&gt;&lt;span&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span&gt; std::endl;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251013102114215.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;作业5：&lt;a href=&quot;#作业5&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;section&gt;&lt;h4&gt;答疑&lt;a href=&quot;#答疑&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;问题：为什么要在原始的三维三角形网格上新建一个坐标系？再在这个坐标系上，把向量找出来，往2维平面上投影，和tuttes参数化后的坐标联立，解出变换的jacob矩阵？&lt;/p&gt;&lt;p&gt;答案：因为tuttes参数化后的坐标本身就是在2d平面上的，这个平面上的xy坐标可以正确表示，每个三角形的向量也可以正确由xy坐标相减表示出来。而三维坐标上的向量不是如此。想象一下，空间中有一个近似于垂直于xoy平面的 正 三角形
如果单纯的把xy二维坐标上的值相减得到三角形边向量的话，这个三角形形状肯定是被改变了的。所以要先在三维平面上建立一个坐标系。投影到2维平面上，求出jacob矩阵。&lt;/p&gt;&lt;p&gt;如何操作：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251016165649245.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251016165704102.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251016165712122.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;S是三维坐标系构建好的矩阵，的两条向量，e1和e2，由于e1是设为x轴，所以他这个向量的y方向是0，而x，y是
选择的基准点的坐标，他是在local坐标下的向量。这里的e1和e2，在三维三角形中，必须要和二维三角形中的向量一一对应。这里要计算三角形的线性变化jacob，用向量的形式计算出jacob就可以。主要是要确定基准点进行变换&lt;/p&gt;&lt;p&gt;没有对边界点加约束的后果：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017001046486.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;
只简单地加了对角正则 A(ii)+=1e-8。这个微小的 εI 相当于“软约束”，把原本奇异的拉普拉斯 L 变成 L+εI，消除了零空间（常量向量)，使矩阵可逆，SparseLU 能做完全支点选取并完成因式分解。
效果：这个原因是因为没有把b向量的构建对应起来
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017001126203.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;最后还是要固定边界点，找最小二乘
为什么不固定边界点会有零空间：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;1.  你构造的是标准 cotangent 拉普拉斯 L：对角等于该行所有邻边权值之和，邻接是负权值，故每行元素和为 0 → 常量向量 (1,1,...,1) 满足 L·c=0，形成零空间。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2.  如果网格有多个连通分量，每个分量的常量向量都在零空间 → 零空间维度≥分量数。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;3.  跳过退化三角形或边界半边会让某些顶点行近似全零或只剩很小对角，增加额外近似零方向。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;4.  未加任何 Dirichlet 约束（固定顶点）或对角正则前，平移自由度未被去除，因此 L 不可逆。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;5.  若再存在孤立顶点（度=0），对应行全 0，直接再增一维零空间。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;解决：固定至少一个（更常用：一圈边界）顶点行或加极小正则 εI；有多分量需各自锚点。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;如果直接对原始模型的边界进行固定，得到的效果是下图：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017003438041.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;另一处错误：
ax=b中的b向量设置错误：这里拍平后的三角形的向量边要与初始的localcoords中的向量相互对应，然后再对顶点开始作用。算的是网格中所有的三角形网格向量对于某点的力的作用。
如果没有对应起来就是上面的情况。对应起来就是下面这个：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017193812850.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;最后对于边界的处理有问题：直接跳过对边界的处理是不合理的，会导致上图这种情况。
注释掉后得到下面的最终结果：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017214409569.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017214432786.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;不能continue跳过处理
原因：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2.  Laplacian A 构造：跳过 boundary 半边 (ithe-&amp;gt;isBoundary()) 使某些仅与边界接触、拓扑度很低的顶点行几乎全 0（只被正则 1e-8 微调）。SparseLU 在近奇异情况下把它们解成接近 0 的数 → 出现从原点辐射的线。解决：对所有 boundary 顶点加入硬 Dirichlet 行 (A(ii)=1, b=原参数化坐标)，或只排除 boundary 顶点出线性系统。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;这行 continue 的意思是：“如果这是一条边界边，就完全忽略它，不要为它计算任何权重，也不要在矩阵 A 中建立任何连接。”&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;这导致了什么后果？&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;边界顶点在矩阵A中是“孤立”的：考虑一个边界顶点。它连接的所有边都是边界边（除了极少数情况）。因为您的代码跳过了所有边界边，所以在构建矩阵A时，这个边界顶点与它的任何邻居之间都没有建立连接！&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;软约束无力回天：之后，您对边界点施加了一个软约束 A.coeffRef(i, i) += 1e-8;。此时，一个边界顶点 i 在矩阵 A 中对应的整行，除了对角线上的 1e-8 之外，几乎全是零！&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;方程爆炸：这意味着，对于一个边界顶点 i，它在全局步骤中需要求解的方程，实际上简化成了： 1e-8 * u_i = b_i 这里的 b_i 是从局部步骤计算出的一个非零的“理想拉力”。为了解出 u_i，系统只能计算 u_i = b_i / 1e-8。这是一个极其巨大的数值！&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;视觉结果：因此，所有边界顶点都被计算到了一个离原点非常遥远的位置。而内部顶点由于受到正确的约束，位置相对正常。最终，您就看到了从内部“飞”向遥远边界的那些奇怪直线。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;cot权值的累加：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;3. “累加”的魔力：从“贡献”到完整的矩阵&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;最关键的一点是，这个过程会对网格中的每一条内部边都执行一次。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;想象一下顶点 i，它有三个邻居 j, k, l。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;当循环处理边 (i, j) 时，A(i, i) 会被加上 w_ij。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;当循环处理边 (i, k) 时，A(i, i) 会被再次加上 w_ik。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;当循环处理边 (i, l) 时，A(i, i) 会被第三次加上 w_il。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;当所有边都处理完毕，A.setFromTriplets(...) 会执行累加。最终，矩阵 A 中 A(i, i) 的值，就是所有与顶点 i 相连的边的 cotangent 权重之和：w_ij + w_ik + w_il。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017220606871.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017221152044.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;问答：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017222337490.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;那现在后面那个b矩阵我没有理解，为什么是要这么做：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;就算你说参考了力学的作用，对每个顶点有这样一个力，我还是没理解为什么要这么写得出来的结果是arap的？为什么要用cots，global我知道是旋转矩阵，那为什么能根据这个公式得到b，b是什么？b是拍平后的3维三角形，每个向量的大小，乘以到tutte参数化上的那个旋转矩阵，乘以cots？为什么这么写，cots是什么意义，我这么乘是啥意思，这不是有缩放了吗，我不是要保证尽可能isometric吗，我认为右边就是一个缩放矩阵就行了&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;答案：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;1. b 是什么？—— “理想的内部拉力”集合&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;首先，也是最重要的一点：b 向量不是坐标，也不是一个变换矩阵。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;您可以把 b 向量想象成一个列表，记录了施加在每一个顶点上的一个**“理想的合力”**。整个全局步骤的目标就是求解一个巨大的平衡方程：A * u = b&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;u: 我们想要求解的、新的、更好的顶点位置。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;A: 我们已经知道，这是余切拉普拉斯矩阵。它可以被看作是描述当前网格 u 内部弹力的系统。A*u 计算出的就是当前形状 u 下，每个顶点受到的内部合力。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;b: 这是我们期望的、理想状态下每个顶点应该受到的内部合力。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;所以，求解 A*u = b 的物理意义就是：“请找到这样一个新的形状 u，使得它自身的内部弹力 (A*u)，与我们计算出的‘理想拉力’ (b) 完全相等。”&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2. b 的构建：一步步拆解 cots * global * e&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;现在我们来拆解这个“理想拉力”是如何计算出来的。它分为三步，对应三个乘法：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;第一步: e —— “完美”的边 (e01, e12, e21)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;是什么？ e01, e12, e21 是从 local_coords 中重建出来的2D边向量。而 local_coords 来自于对原始3D模型的“拍平”。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;意义？ e 代表了在没有任何变形、拉伸或压缩的情况下，这条边最完美的、最原始的2D形态。它是我们追求“保长度”的**“黄金标准”**。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;第二步: global[i] * e —— “理想”的边&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;是什么？ global[i] 是我们在局部步骤中为这个三角形计算出的最佳旋转矩阵 R。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;意义？ R * e 的意思是：“取那条‘完美’的边 e，将它旋转到当前参数化平面上最合适的位置。”&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;结果？ R * e 是一个**“理想的边向量”。它具有我们想要的完美的长度**（来自e）和理想的方向（来自R）。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;第三步: cots * (global[i] * e) —— “有影响力的理想拉力”&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;是什么？ cots 是我们计算出的余切权重。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;为什么要有它？ 这就是最核心、也最违反直觉的一步。cots 在这里不是为了缩放几何，而是为了赋予这个“理想拉力”一个正确的“影响力”或“权重”。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;意义？ cots 来自ARAP能量函数的数学推导（求导）。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ARAP的能量衡量了当前形状与理想形状的差异。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;这个能量公式中，余切权重 cots 自然地作为加权因子出现。一个形状良好、面积大的三角形，其cotangent值通常更大，它对总能量的贡献也更大。这很合理：我们应该更关注那些“重要”的三角形。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;当我们对这个能量函数求导以找到最小值时，cots 这个权重项就同时保留在了等式的左边（构成了矩阵 A）和右边（构成了向量 b）。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;所以，b 向量必须乘以 cots，不是为了改变几何，而是为了与矩阵 A 的构建方式保持数学上的一致性！ 如果 b 不乘以 cots，那么 A*u=b 这个方程本身就是错误的，它不再是原始能量函数的正确梯度。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;解答您的疑问&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;现在，我们可以直接回答您的问题了：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;“为什么要用cots？”&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;因为 cots 是ARAP能量函数中的自然权重。为了让我们的线性系统 A*u=b 成为该能量函数的正确梯度，cots 必须同时作为权重出现在矩阵A和向量b中。它衡量的是每条边在整个系统中的“重要性”。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;“我这么乘是啥意思，这不是有缩放了吗？”&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;您看得完全正确，这是一个缩放。但关键在于，我们缩放的不是几何本身，而是这个几何元素（边）在全局平衡方程中的**“话语权”或“影响力”**。一条权重（cots）大的边，它产生的“理想拉力”就更大，求解器在寻找最终平衡点时，就会更“努力”地去满足这条边的长度和方向要求。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;“我不是要保证尽可能isometric吗？”&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;是的！而 A*u=b 这个方程，正是实现这个目标的数学工具。求解这个方程得到的新 u，其每个三角形的形状会趋向于 global[i] * e 所定义的那个只有旋转、没有缩放的“理想形状”。cots 在这个过程中扮演的角色，是告诉求解器在成千上万个三角形中，应该优先满足哪些三角形的“保长度”要求。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;“我认为右边就是一个缩放矩阵就行了”&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;这里的混淆点在于，b 不是一个作用于顶点的变换。它是一个目标值。整个过程更像是一个巨大的“最小二乘”拟合问题：我们有一个描述内部连接的矩阵A，我们想找到一个位置向量u，使得A*u的结果尽可能地接近我们的目标b。而这个b，正是由“旋转过的完美边”和“边的重要性(cots)”共同决定的。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;希望这个从物理意义到数学原理的拆解，能够彻底解开您关于 b 向量的疑惑！这是一个非常深刻的问题，理解了它，就真正理解了ARAP算法的精髓。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;ARAP推导文档&lt;a href=&quot;#arap推导文档&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ARAP能量函数与梯度的推导&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;您的问题非常深刻：Au = b 这个线性系统，是如何从“尽可能保持等距(isometric)”这个目标推导出来的？为什么cotangent权重会同时出现在A和b中？&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;答案在于，ARAP算法的核心是定义一个**“变形能量” (Deformation Energy)**，然后通过最小化这个能量来找到最佳的2D顶点位置。我们求解的线性系统Au=b，正是这个能量函数梯度为零的数学表达。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;1. 核心思想：定义“变形能量”&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ARAP的能量衡量的是当前2D形状与理想2D形状之间的差异。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;当前2D形状: 由我们要求解的变量——顶点位置 u 决定。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;理想2D形状: 它就是原始3D三角形经过一次纯旋转后得到的形状。它具有完美的边长和角度，只是方向变了。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;因此，ARAP的总能量 E(U) 是所有三角形的“局部变形能量” E_T 的总和：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$$E(U) = &lt;/span&gt;&lt;span&gt;\s&lt;/span&gt;&lt;span&gt;um_{T &lt;/span&gt;&lt;span&gt;\i&lt;/span&gt;&lt;span&gt;n &lt;/span&gt;&lt;span&gt;\t&lt;/span&gt;&lt;span&gt;ext{Mesh}} E_T$$&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;而每个三角形 T 的局部变形能量，是其三条边的“变形程度”的加权和：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$$E_T(u_i, u_j, u_k) = &lt;/span&gt;&lt;span&gt;\s&lt;/span&gt;&lt;span&gt;um_{e_{ij} &lt;/span&gt;&lt;span&gt;\i&lt;/span&gt;&lt;span&gt;n T} w_{ij} &lt;/span&gt;&lt;span&gt;\l&lt;/span&gt;&lt;span&gt;eft&lt;/span&gt;&lt;span&gt;\|&lt;/span&gt;&lt;span&gt; (u_i - u_j) - R_T(p_i - p_j) &lt;/span&gt;&lt;span&gt;\r&lt;/span&gt;&lt;span&gt;ight&lt;/span&gt;&lt;span&gt;\|&lt;/span&gt;&lt;span&gt;^2$$&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;让我们拆解这个关键公式：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;u_i, u_j: 当前2D参数化平面上的顶点坐标（这是我们的变量）。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;p_i, p_j: 原始3D模型中的顶点坐标（这是常量）。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(u_i - u_j): 当前2D网格中的边向量。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(p_i - p_j): 原始3D网格中的边向量。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;R_T: 在局部步骤中为这个三角形T计算出的最佳旋转矩阵。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;R_T(p_i - p_j): 这就是我们说的**“理想的边向量”**——它有完美的长度和角度，只是被旋转到了最佳方向。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;w_{ij}: 这就是余切权重 (cotangent weight)。它衡量了这条边在整个能量计算中的“重要性”或“影响力”。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2. 最小化能量：梯度为零&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;为了找到使总能量 E(U) 最小的顶点位置 U，我们需要使用微积分的基本原理：在最小值点，能量函数对所有变量的梯度（偏导数）都必须为零。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;我们的变量是所有顶点的坐标 u_k (具体来说是 u_k.x 和 u_k.y)。所以，我们需要求解以下方程组：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$$&lt;/span&gt;&lt;span&gt;\f&lt;/span&gt;&lt;span&gt;rac{&lt;/span&gt;&lt;span&gt;\p&lt;/span&gt;&lt;span&gt;artial E(U)}{&lt;/span&gt;&lt;span&gt;\p&lt;/span&gt;&lt;span&gt;artial u_k} = 0 &lt;/span&gt;&lt;span&gt;\q&lt;/span&gt;&lt;span&gt;uad (&lt;/span&gt;&lt;span&gt;\t&lt;/span&gt;&lt;span&gt;ext{对于所有顶点 } k)$$&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;3. 开始推导：对单个顶点求偏导&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;我们来关注能量函数 E 对某一个特定顶点 u_k 的偏导数。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;首先，注意到 u_k 只会出现在与它相邻的边的能量项中。所以我们只需要对包含 u_k 的那些能量项求导。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;让我们看一条边 (k, j) 的能量项：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$E_{kj} = w_{kj} &lt;/span&gt;&lt;span&gt;\l&lt;/span&gt;&lt;span&gt;eft&lt;/span&gt;&lt;span&gt;\|&lt;/span&gt;&lt;span&gt; (u_k - u_j) - R_{kj}(p_k - p_j) &lt;/span&gt;&lt;span&gt;\r&lt;/span&gt;&lt;span&gt;ight&lt;/span&gt;&lt;span&gt;\|&lt;/span&gt;&lt;span&gt;^2$&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(这里的 R_kj 是包含边 (k,j) 的某个三角形的旋转矩阵)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;对这个能量项求 u_k 的偏导数，根据链式法则 (d/dx) ||v(x)||^2 = 2v(x) · (dv/dx)，我们得到：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$$&lt;/span&gt;&lt;span&gt;\f&lt;/span&gt;&lt;span&gt;rac{&lt;/span&gt;&lt;span&gt;\p&lt;/span&gt;&lt;span&gt;artial E_{kj}}{&lt;/span&gt;&lt;span&gt;\p&lt;/span&gt;&lt;span&gt;artial u_k} = 2 w_{kj} &lt;/span&gt;&lt;span&gt;\l&lt;/span&gt;&lt;span&gt;eft( (u_k - u_j) - R_{kj}(p_k - p_j) &lt;/span&gt;&lt;span&gt;\r&lt;/span&gt;&lt;span&gt;ight)$$&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;现在，我们将所有与 u_k 相连的边的贡献加起来，并让总和为零：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$$&lt;/span&gt;&lt;span&gt;\f&lt;/span&gt;&lt;span&gt;rac{&lt;/span&gt;&lt;span&gt;\p&lt;/span&gt;&lt;span&gt;artial E}{&lt;/span&gt;&lt;span&gt;\p&lt;/span&gt;&lt;span&gt;artial u_k} = &lt;/span&gt;&lt;span&gt;\s&lt;/span&gt;&lt;span&gt;um_{j &lt;/span&gt;&lt;span&gt;\i&lt;/span&gt;&lt;span&gt;n N(k)} 2 w_{kj} &lt;/span&gt;&lt;span&gt;\l&lt;/span&gt;&lt;span&gt;eft( (u_k - u_j) - R_{kj}(p_k - p_j) &lt;/span&gt;&lt;span&gt;\r&lt;/span&gt;&lt;span&gt;ight) = 0$$&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(这里的 N(k) 代表顶点 k 的所有邻居顶点 j)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;4. 整理方程：分离变量 u&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;我们可以把上面这个方程中的 u 项和 p, R 项分开。首先，去掉常数 2：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$$&lt;/span&gt;&lt;span&gt;\s&lt;/span&gt;&lt;span&gt;um_{j &lt;/span&gt;&lt;span&gt;\i&lt;/span&gt;&lt;span&gt;n N(k)} w_{kj} (u_k - u_j) - &lt;/span&gt;&lt;span&gt;\s&lt;/span&gt;&lt;span&gt;um_{j &lt;/span&gt;&lt;span&gt;\i&lt;/span&gt;&lt;span&gt;n N(k)} w_{kj} R_{kj}(p_k - p_j) = 0$$&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;然后，移项得到我们最终的平衡方程：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$$&lt;/span&gt;&lt;span&gt;\s&lt;/span&gt;&lt;span&gt;um_{j &lt;/span&gt;&lt;span&gt;\i&lt;/span&gt;&lt;span&gt;n N(k)} w_{kj} (u_k - u_j) = &lt;/span&gt;&lt;span&gt;\s&lt;/span&gt;&lt;span&gt;um_{j &lt;/span&gt;&lt;span&gt;\i&lt;/span&gt;&lt;span&gt;n N(k)} w_{kj} R_{kj}(p_k - p_j)$$&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;这个方程必须对每一个内部顶点 k 都成立。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;5. 连接数学与代码：Au = b 的诞生&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;现在，我们来看这个方程是如何变成您的代码的。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;等式左边 (LHS): A * u&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$$&lt;/span&gt;&lt;span&gt;\t&lt;/span&gt;&lt;span&gt;ext{LHS} = &lt;/span&gt;&lt;span&gt;\s&lt;/span&gt;&lt;span&gt;um_{j &lt;/span&gt;&lt;span&gt;\i&lt;/span&gt;&lt;span&gt;n N(k)} w_{kj} (u_k - u_j)$$&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;我们把它展开：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$$&lt;/span&gt;&lt;span&gt;\t&lt;/span&gt;&lt;span&gt;ext{LHS} = &lt;/span&gt;&lt;span&gt;\l&lt;/span&gt;&lt;span&gt;eft(&lt;/span&gt;&lt;span&gt;\s&lt;/span&gt;&lt;span&gt;um_{j &lt;/span&gt;&lt;span&gt;\i&lt;/span&gt;&lt;span&gt;n N(k)} w_{kj}&lt;/span&gt;&lt;span&gt;\r&lt;/span&gt;&lt;span&gt;ight) u_k - &lt;/span&gt;&lt;span&gt;\s&lt;/span&gt;&lt;span&gt;um_{j &lt;/span&gt;&lt;span&gt;\i&lt;/span&gt;&lt;span&gt;n N(k)} w_{kj} u_j$$&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;这正是您的余切拉普拉斯矩阵 A 的定义！&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;对角线元素 A(k, k): 它的值是所有与 k 相连的边的权重之和，即 (∑ w_kj)。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;非对角线元素 A(k, j): 它的值是连接 k 和 j 的那条边的权重的负数，即 -w_kj。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;当矩阵 A 的第 k 行乘以顶点位置向量 u 时，得到的结果 (Au)_k 就精确地等于上面的展开式。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;等式右边 (RHS): b&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$$&lt;/span&gt;&lt;span&gt;\t&lt;/span&gt;&lt;span&gt;ext{RHS} = &lt;/span&gt;&lt;span&gt;\s&lt;/span&gt;&lt;span&gt;um_{j &lt;/span&gt;&lt;span&gt;\i&lt;/span&gt;&lt;span&gt;n N(k)} w_{kj} R_{kj}(p_k - p_j)$$&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;这正是您的**“理想拉力”向量 b**！&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;向量 b 的第 k 个元素 b_k，就是所有与 k 相连的“理想边” R(p_k-p_j)，经过它们各自的余切权重 w_kj 加权后的总和。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;您的代码通过遍历每个三角形，并将计算出的 cots * global * e 的贡献累加到相应的顶点上，最终构建出了这个 b 向量。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;结论&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;我们已经完整地从ARAP的能量函数出发，推导出了您代码中求解的线性系统 Au = b。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;这个推导过程清晰地表明：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cotangent 是能量函数中固有的权重，它衡量了每条边的重要性。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;对能量函数求导（寻找最小值）时，这个 cotangent 权重 w 自然地、同时地出现在了包含变量 u 的项（最终构成了矩阵A）和不包含变量 u 的项（最终构成了向量b）中。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;因此，为了正确地最小化ARAP能量，cotangent 必须同时作为构建A和b的权重。您看到的 b 向量中的 cots 乘法，不是一个随意的缩放，而是能量梯度推导的必然结果。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;具体就是对原始公式求个导，然后变量分离&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017224108419.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017224028364.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017223916174.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017224228346.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017224837026.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;https://blog.csdn.net/why18767183086/article/details/108034725?ops_request_misc=%257B%2522request%255Fid%2522%253A%25227b52c04b5fa98b59c44a9cf535761a34%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&amp;amp;request_id=7b52c04b5fa98b59c44a9cf535761a34&amp;amp;biz_id=0&amp;amp;utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-108034725-null-null.142^v102^pc_search_result_base2&amp;amp;utm_term=arap%E5%8F%82%E6%95%B0%E5%8C%96&amp;amp;spm=1018.2226.3001.4187&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017224940270.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;这个是连续介-质力学”的公式，另一个是相同意义的离散微分几何公式&lt;/p&gt;&lt;p&gt;为什么只对ui求偏导？而不是pi？&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017225725809.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;这个公式的单例的意义是什么？：&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251017233103287.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;作业6&lt;a href=&quot;#作业6&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;问题：
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251026211612175.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;进行变换之后，所有顶点的Z轴方向改变，全都缩到原点去了，解决：把所有的Z轴不做变换。
我记得一开始还出现了一旦拖动顶点，所有顶点都会往中心去，是因为Z轴的坐标突然迭代变很大。这是什么原因造成的？&lt;/p&gt;&lt;p&gt;后面一个问题：fixed顶点在变形过程中还会改变：这是因为相机的缘故，每次通过meshupdate()的方法都会重置相机位置
&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251026223258245.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251026223316221.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;现在的问题是，变形过程中这个模型会发生萎缩。原因是我只做了一次迭代，没有做多次迭代，效果不到位&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251026223355175.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;重点错误：&lt;a href=&quot;#重点错误&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;这里做出来的重点错误就是，每次变换后，把这次变换前的坐标（上一次变换的new_position）作为old_position保存，然后进行下次迭代，这是严重的理解错误。正确做法是把模型一开始的顶点位置作为old_position保存起来，然后每次都是依据这个Old_position进行迭代的。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;作业 7&lt;a href=&quot;#作业-7&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;我的代码好像确实是没问题的，问题在于结果的展示有问题，理论上来讲，参数化后应该是按照原来模型的分布进行展示，而我现在的样子是把他逆时针转了75度左右。是因为我边界半边参数化做的有问题吗&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251108234437052.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;p&gt;下面这个是普通的tuttes embedding&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251108234932784.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;项目环境与调试记录&lt;a href=&quot;#项目环境与调试记录&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;从vs2022升级到vs2026有一堆报错，主要的问题是E1696找不到头文件的问题，我的解决方案是把老版本的sdk装回来，然后重新配置。这里发现仍然解决不了问题，问题集中在IntelliSense上面，一直有提示错误E1696。问了gemini发现删除掉原项目的.VS文件夹后，缓存清理之后就可以正常无报错提示了。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;很高兴你解决了问题！&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;你问的 .vs 文件夹是一个非常好的问题。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;简单来说，.vs 文件夹是 Visual Studio 为你的项目（或解决方案）创建的一个“缓存和临时配置”文件夹。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;它不是你的源代码的一部分。它100%可以安全删除（就像你刚刚做的那样），Visual Studio 会在下次打开项目时自动重新生成它。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;1. 它的主要作用是什么？&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.vs 文件夹里存放着所有“与你本地开发环境相关”的临时数据，主要包括：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IntelliSense 数据库 (最重要的)：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;这就是导致你 E1696 错误的“元凶”。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;为了实现快速的代码自动补全、错误提示（红色波浪线）和“转到定义”功能，Visual Studio 会预先扫描你的所有代码和 #include 的头文件，为它们建立一个索引数据库（通常是 .db 或 .suo 文件）。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;这个数据库就存放在 .vs 文件夹里。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;本地用户设置：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;比如你上次打开项目时，打开了哪些文件、在哪些行设置了断点、你的窗口布局是怎样的。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;这些个性化设置也存在这里，这样你下次打开项目时，VS可以恢复到你上次离开时的状态。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;浏览信息 (Browse Information)：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;用于支持 &quot;Class View&quot;（类视图）和 &quot;Object Browser&quot;（对象浏览器）的数据。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2. 为什么删除它能解决你的 E1696 问题？&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;你遇到的情况是：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;你迁移了项目（从 VS2022 到 &quot;VS2026&quot;，或者只是换了环境）。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;你的 CMakeLists.txt 和源代码都是最新的。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;但是，.vs 文件夹里的 IntelliSense 数据库还是旧的。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;这个旧的数据库“记住”了你旧环境的头文件路径（比如 D:\old_libs\eigen），所以它找不到文件，疯狂提示你 E1696 错误。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;与此同时，你的 CMake 配置（在 build 文件夹里）可能也是旧的。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;你执行的“方案B”做了两件事：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;删除 build 文件夹： 这强制 CMake 重新运行，生成了指向新环境、新路径的正确配置。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;删除 .vs 文件夹： 这强制 IntelliSense 扔掉了那个过时的、指向旧路径的数据库。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;当你重新打开VS时，IntelliSense 发现数据库没了，于是它根据第一步生成的那个全新的、正确的 CMake 配置，重新扫描了所有文件，建立了一个全新的、正确的数据库。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;于是，你的 E1696 红色波浪线就消失了。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;总结&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;你可以把 .vs 文件夹想象成是 VS 为这个项目专门准备的“草稿纸”。时间久了，草稿纸上记的东西（缓存）可能会过时或写错（损坏）。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;当VS表现得很奇怪（比如明明能编译，却满是红色波浪线）时，最简单的办法就是把这张“草稿纸”撕掉（删除 .vs 文件夹），让它拿张新纸重新开始写（重建缓存）。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;因此，在 git 或 svn 这样的版本控制系统中，.vs 文件夹永远都应该被添加到 .gitignore（忽略列表）中，绝对不要提交它。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;数学补充&lt;a href=&quot;#数学补充&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;正交矩阵列向量是单位向量&lt;a href=&quot;#正交矩阵列向量是单位向量&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251022001439130.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;img src=&quot;/assets/posts/digital-geometry-processing/image-20251022001519844.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>力扣</title><link>https://insistentwind.github.io/posts/leetcode-notes/</link><guid isPermaLink="true">https://insistentwind.github.io/posts/leetcode-notes/</guid><description>按题型整理力扣练习、常用模板、错误原因和复习记录。</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;这篇笔记用于持续记录力扣练习。重点不是累计题目数量，而是整理可迁移的解题思路、容易出错的边界条件和需要定期复习的题目。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;练习记录&lt;a href=&quot;#练习记录&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;




















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;日期&lt;/th&gt;&lt;th&gt;题目&lt;/th&gt;&lt;th&gt;类型&lt;/th&gt;&lt;th&gt;难度&lt;/th&gt;&lt;th&gt;状态&lt;/th&gt;&lt;th&gt;核心思路&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;td&gt;初次完成&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;状态可以使用：&lt;code&gt;初次完成&lt;/code&gt;、&lt;code&gt;需要复习&lt;/code&gt;、&lt;code&gt;独立完成&lt;/code&gt;。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;数组与双指针&lt;a href=&quot;#数组与双指针&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;题目：TODO&lt;a href=&quot;#题目todo&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;问题特征：&lt;/strong&gt; TODO&lt;/p&gt;&lt;p&gt;&lt;strong&gt;核心思路：&lt;/strong&gt; TODO&lt;/p&gt;&lt;p&gt;&lt;strong&gt;容易出错：&lt;/strong&gt; TODO&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// TODO：补充代码&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;哈希表&lt;a href=&quot;#哈希表&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;TODO：记录什么时候用哈希表换取查询效率，以及键和值分别表示什么。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;链表&lt;a href=&quot;#链表&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;TODO：重点记录虚拟头节点、快慢指针、反转和环检测。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;二叉树&lt;a href=&quot;#二叉树&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;TODO：区分前序、中序、后序和层序遍历，整理递归函数的返回值含义。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;动态规划&lt;a href=&quot;#动态规划&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;遇到动态规划问题时依次写清：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;状态定义&lt;/li&gt;
&lt;li&gt;状态转移方程&lt;/li&gt;
&lt;li&gt;初始条件&lt;/li&gt;
&lt;li&gt;遍历顺序&lt;/li&gt;
&lt;li&gt;空间优化方式&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;常用模板&lt;a href=&quot;#常用模板&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;二分查找&lt;a href=&quot;#二分查找&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; left &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; right &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; (left &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; right) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; mid &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; left &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; (right &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; left) &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// TODO：根据题意更新边界&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;错题与复习&lt;a href=&quot;#错题与复习&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt; TODO：记录第一次没有想到的题目&lt;/li&gt;
&lt;li&gt; TODO：记录边界条件写错的题目&lt;/li&gt;
&lt;li&gt; TODO：一周后独立重写&lt;/li&gt;
&lt;li&gt; TODO：一个月后再次复习&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;</content:encoded></item><item><title>低质量曲线曲面</title><link>https://insistentwind.github.io/posts/low-quality-curves-and-surfaces/</link><guid isPermaLink="true">https://insistentwind.github.io/posts/low-quality-curves-and-surfaces/</guid><description>整理低质量曲线与曲面的识别、修复和质量评估方法。</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;这篇笔记用于整理低质量曲线、曲面的常见表现，以及后续分析和修复时可以采用的基本思路。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;问题背景&lt;a href=&quot;#问题背景&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在几何建模、数据交换或逆向重建过程中，曲线曲面可能出现连续性不足、局部振荡、参数分布不合理等问题。这些问题会继续影响网格划分、数值计算和加工路径生成。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;TODO：补充具体项目背景、输入数据来源和需要达到的质量目标。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;常见问题&lt;a href=&quot;#常见问题&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;曲线存在尖点、折点或不必要的高频振荡&lt;/li&gt;
&lt;li&gt;曲面边界不匹配，存在缝隙或重叠&lt;/li&gt;
&lt;li&gt;参数化不均匀，局部采样过密或过疏&lt;/li&gt;
&lt;li&gt;曲率变化不平滑&lt;/li&gt;
&lt;li&gt;相邻曲面的位置、切向或曲率连续性不足&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;质量评价指标&lt;a href=&quot;#质量评价指标&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;几何误差&lt;a href=&quot;#几何误差&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;记录原始几何与修复结果之间的距离误差，例如最大误差、平均误差和均方根误差。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;连续性&lt;a href=&quot;#连续性&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;按照实际需求检查位置连续、切向连续和曲率连续。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;光顺性&lt;a href=&quot;#光顺性&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;可以结合曲率梳、等照度线或高斯曲率分布观察局部异常。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;处理流程&lt;a href=&quot;#处理流程&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;对输入曲线曲面进行采样和异常检测&lt;/li&gt;
&lt;li&gt;定位低质量区间或局部面片&lt;/li&gt;
&lt;li&gt;根据问题类型选择重参数化、拟合、光顺或局部重建&lt;/li&gt;
&lt;li&gt;加入边界和连续性约束&lt;/li&gt;
&lt;li&gt;对修复前后的误差与光顺性进行比较&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;实验记录&lt;a href=&quot;#实验记录&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;


















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;数据&lt;/th&gt;&lt;th&gt;问题&lt;/th&gt;&lt;th&gt;使用方法&lt;/th&gt;&lt;th&gt;最大误差&lt;/th&gt;&lt;th&gt;结果&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;待补充&lt;a href=&quot;#待补充&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt; 加入问题曲线和曲面的示意图&lt;/li&gt;
&lt;li&gt; 明确质量阈值和评价标准&lt;/li&gt;
&lt;li&gt; 记录使用的软件、算法或代码实现&lt;/li&gt;
&lt;li&gt; 对比不同修复方法的优缺点&lt;/li&gt;
&lt;li&gt; 总结仍未解决的问题&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;</content:encoded></item><item><title>数学建模</title><link>https://insistentwind.github.io/posts/mathematical-modeling/</link><guid isPermaLink="true">https://insistentwind.github.io/posts/mathematical-modeling/</guid><description>整理数学建模问题从分析、假设、建模到验证和写作的完整过程。</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;这篇笔记用于沉淀数学建模过程中可以重复使用的分析框架、模型方法和写作检查清单。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;读题与问题拆解&lt;a href=&quot;#读题与问题拆解&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;拿到题目后，先区分已知数据、决策变量、目标和约束，再判断每个小问之间的数据与模型依赖关系。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;TODO：在这里填写具体赛题、来源和需要解决的核心问题。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;基本假设&lt;a href=&quot;#基本假设&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;TODO：说明忽略哪些次要因素&lt;/li&gt;
&lt;li&gt;TODO：说明数据或研究对象的基本条件&lt;/li&gt;
&lt;li&gt;TODO：说明模型适用的时间与空间范围&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;每条假设都应服务于模型简化，并在后文讨论它可能带来的误差。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;符号说明&lt;a href=&quot;#符号说明&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;



















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;符号&lt;/th&gt;&lt;th&gt;含义&lt;/th&gt;&lt;th&gt;单位&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;&lt;span&gt;xx&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span&gt;&lt;span&gt;yy&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;数据处理&lt;a href=&quot;#数据处理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;数据来源与可信度&lt;/li&gt;
&lt;li&gt;缺失值和异常值处理&lt;/li&gt;
&lt;li&gt;量纲统一与标准化&lt;/li&gt;
&lt;li&gt;探索性统计与可视化&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;模型建立&lt;a href=&quot;#模型建立&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;问题一&lt;a href=&quot;#问题一&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;TODO：写出目标、变量、约束和核心公式。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;问题二&lt;a href=&quot;#问题二&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;TODO：说明与问题一的联系，以及新增的变量或约束。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;求解方法&lt;a href=&quot;#求解方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;TODO：记录算法选择、参数设置、收敛条件和计算复杂度。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;结果与检验&lt;a href=&quot;#结果与检验&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;检查结果是否满足原始约束&lt;/li&gt;
&lt;li&gt;与基线方法或真实数据比较&lt;/li&gt;
&lt;li&gt;进行灵敏度分析和稳定性检验&lt;/li&gt;
&lt;li&gt;解释结果的实际意义，而不只报告数值&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;模型评价&lt;a href=&quot;#模型评价&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;优点&lt;a href=&quot;#优点&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;TODO&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;局限&lt;a href=&quot;#局限&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;TODO&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;改进方向&lt;a href=&quot;#改进方向&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;TODO&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;写作检查清单&lt;a href=&quot;#写作检查清单&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt; 摘要包含问题、方法、结果和结论&lt;/li&gt;
&lt;li&gt; 假设与符号表完整&lt;/li&gt;
&lt;li&gt; 公式中的符号均有定义&lt;/li&gt;
&lt;li&gt; 图表有标题、单位和解释&lt;/li&gt;
&lt;li&gt; 结论直接回答题目问题&lt;/li&gt;
&lt;li&gt; 引用、附录和代码说明完整&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;</content:encoded></item><item><title>拓扑优化重建</title><link>https://insistentwind.github.io/posts/topology-optimization-reconstruction/</link><guid isPermaLink="true">https://insistentwind.github.io/posts/topology-optimization-reconstruction/</guid><description>记录从拓扑优化结果到可编辑、可制造几何模型的重建流程。</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;拓扑优化通常输出密度场、体素或离散网格，而后续设计和制造需要边界清晰、表面光顺且能够继续编辑的几何模型。这篇笔记用于整理两者之间的重建过程。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;目标与输入&lt;a href=&quot;#目标与输入&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;输入：&lt;/strong&gt; TODO：密度场、有限元网格、STL 或其他离散结果。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;输出：&lt;/strong&gt; TODO：三角网格、参数曲面、实体模型或可制造结构。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;约束：&lt;/strong&gt; 保留主要受力路径，并满足误差、光顺性、最小特征尺寸等要求。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;总体流程&lt;a href=&quot;#总体流程&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;读取拓扑优化结果&lt;/li&gt;
&lt;li&gt;根据密度阈值提取结构边界&lt;/li&gt;
&lt;li&gt;清理孤立区域、孔洞和非流形结构&lt;/li&gt;
&lt;li&gt;对网格进行简化与光顺&lt;/li&gt;
&lt;li&gt;识别主要结构特征&lt;/li&gt;
&lt;li&gt;重建曲线、曲面或参数化实体&lt;/li&gt;
&lt;li&gt;重新进行有限元验证&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;关键问题&lt;a href=&quot;#关键问题&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;阈值选择&lt;a href=&quot;#阈值选择&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;不同密度阈值会改变结构体积分数、连通关系和细小特征，需要结合优化目标与后续验证确定。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;特征保持&lt;a href=&quot;#特征保持&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;光顺和简化不能破坏关键承载路径、连接位置和必要孔洞。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;几何可编辑性&lt;a href=&quot;#几何可编辑性&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;重建结果不仅要接近原始边界，还应便于尺寸调整、特征识别和制造约束的加入。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;评价方法&lt;a href=&quot;#评价方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;几何偏差：重建模型与优化结果的距离&lt;/li&gt;
&lt;li&gt;体积变化：重建前后的体积分数差异&lt;/li&gt;
&lt;li&gt;结构性能：柔顺度、位移、应力或屈曲性能变化&lt;/li&gt;
&lt;li&gt;模型质量：网格质量、曲面连续性和实体有效性&lt;/li&gt;
&lt;li&gt;制造可行性：最小壁厚、悬垂角、加工方向等&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;实验记录&lt;a href=&quot;#实验记录&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;




















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;方案&lt;/th&gt;&lt;th&gt;阈值&lt;/th&gt;&lt;th&gt;面数&lt;/th&gt;&lt;th&gt;体积变化&lt;/th&gt;&lt;th&gt;性能变化&lt;/th&gt;&lt;th&gt;备注&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;td&gt;TODO&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;待补充&lt;a href=&quot;#待补充&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt; 插入拓扑优化原始结果&lt;/li&gt;
&lt;li&gt; 记录边界提取和网格处理参数&lt;/li&gt;
&lt;li&gt; 补充重建前后模型对比图&lt;/li&gt;
&lt;li&gt; 加入有限元复算结果&lt;/li&gt;
&lt;li&gt; 总结适用范围和失败案例&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;</content:encoded></item><item><title>用 GitHub Pages 发布博客</title><link>https://insistentwind.github.io/posts/publish-with-github-pages/</link><guid isPermaLink="true">https://insistentwind.github.io/posts/publish-with-github-pages/</guid><description>从本地写作到自动上线：这套博客最短的日常发布流程。</description><pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;这套站点使用 GitHub Pages 托管，发布过程由 GitHub Actions 自动完成。日常更新不需要手动上传构建产物。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;新建一篇文章&lt;a href=&quot;#新建一篇文章&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;可以直接运行下面的命令创建一篇草稿：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;corepack&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;文章标题&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;article-slug&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;脚本会在 &lt;code&gt;site/src/content/posts/&lt;/code&gt; 生成草稿，并在 &lt;code&gt;site/public/assets/posts/article-slug/&lt;/code&gt; 创建这篇文章专用的图片目录。也可以复制任意一篇文章，再修改文件名和顶部信息：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;文章标题&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;用于首页和搜索结果的简短摘要&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;published&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;2026-08-08&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;category&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;分类&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;tags&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;标签一&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;标签二&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;image&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;/assets/images/wallpaper/sakura-garden.webp&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;draft&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;在第二个 &lt;code&gt;---&lt;/code&gt; 后使用普通 Markdown 写正文即可。&lt;/p&gt;&lt;p&gt;文章图片统一放在与文章 slug 同名的目录中，例如：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;![&lt;/span&gt;&lt;span&gt;图片说明&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;/assets/posts/article-slug/figure-01.webp&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;需要使用表情时，可以引用 &lt;code&gt;site/public/emoji/&lt;/code&gt; 中的图片：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;![&lt;/span&gt;&lt;span&gt;吃瓜&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;/emoji/chigua.png&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;本地预览&lt;a href=&quot;#本地预览&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;进入 &lt;code&gt;site&lt;/code&gt; 目录后运行：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;corepack&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;默认预览地址是 &lt;code&gt;http://localhost:4321/&lt;/code&gt;。确认无误后提交并推送：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;commit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-m&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;写作：新增文章标题&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;草稿与发布&lt;a href=&quot;#草稿与发布&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;把文章头部的 &lt;code&gt;draft&lt;/code&gt; 设为 &lt;code&gt;true&lt;/code&gt;，构建时就不会生成这篇文章。准备好以后改成 &lt;code&gt;false&lt;/code&gt; 或删除这一行即可发布。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>给项目留一份可查找的工作日志</title><link>https://insistentwind.github.io/posts/keep-a-project-journal/</link><guid isPermaLink="true">https://insistentwind.github.io/posts/keep-a-project-journal/</guid><description>用少量固定结构，记录决定、问题和结果，让未来的自己更快找到上下文。</description><pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;项目记录的价值不是证明做过多少事，而是让关键上下文不必依赖记忆。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;只记录值得回看的信息&lt;a href=&quot;#只记录值得回看的信息&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;一份有效的工作日志通常只需要回答四个问题：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;当时要解决什么问题？&lt;/li&gt;
&lt;li&gt;有哪些限制或已知条件？&lt;/li&gt;
&lt;li&gt;最终选择了什么方案，为什么？&lt;/li&gt;
&lt;li&gt;结果如何，还有哪些事情没有完成？&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;让标题可以被搜索&lt;a href=&quot;#让标题可以被搜索&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;“修复问题”不是一个好标题。“修复 GitHub Pages 刷新文章页后 404”则包含了场景、平台和现象。几个月后，后者更容易通过搜索被找到。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;把过程留在合适的位置&lt;a href=&quot;#把过程留在合适的位置&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;短期任务可以留在提交记录中，稳定的知识适合写进文档，跨项目仍然有价值的经验则值得整理成博客文章。记录的层次越清楚，查找的成本就越低。&lt;/p&gt;&lt;/section&gt;</content:encoded></item></channel></rss>