mod
#2 · 这里是我之前回答的时候说错了,矩阵 K 是半正定而非正定的,非常抱歉。下面放一小段证明以便理解,感兴趣可以看一下。
我们首先回顾一下,面片的二次误差矩阵是 Kf=vvT ,而向量 v=(a,b,c,d)T 对应着面片所在平面 ax+by+cz+d=0 的法向量(但比法向量多了一维)。计算点 u=(x,y,z,1) 二次误差的公式
cost=(vTu)2=uTvvTu=uTKfu中, vTu 是一个内积,展开写就是 ax+by+cz+d ,不难发现该内积和点到平面的距离
distance=a2+b2+c2∣ax+by+cz+d∣之间只差了一个系数 1/a2+b2+c2 ,所以 cost 的含义就是距离的平方。而当我们实际计算的时候,所用的向量 v 直接来自面片的法向量(已经单位化过),所以 a2+b2+c2=1 ,cost 就直接等于 distance 了。根据几何直观,一点到平面距离的平方总是大于等于零的,因此矩阵 Kf 是对称半正定的。
由于顶点的二次误差矩阵 Kv 是若干半正定矩阵 Kf 之和,所以 Kv 是半正定的。同理可得,边的二次误差矩阵 K 也是半正定的。