曲率、挠率的离散推广
ref:https://zhuanlan.zhihu.com/p/179438855
Author:二圈妹
曲率、挠率等概念的离散推广。在很多场景中我们会用到曲率、挠率。
比如狄利克雷能量(Dirichlet Energy)是平滑界(smoothing)的常客:
连续
先硬插一点info,因为构建离散曲线,大部分时间都一段一段连起来,曲线的连续性,有 C(continuity) 和 G(geometry continuity)字母来代表, 如果一段一段之间的导数是到 n 阶都能匹配的,那么我们说它是 C^n连续的,比如:
- C0: 仅连接
- C1: 切线和切线的导数一致
- C2: 曲率一致
G则代表我们仅需n阶导成比例: 比如 G1 代表切线方向一致,大小可能不同。
图是一些连续性条件的示意图。一阶导数不连续( 曲线满足 C^0 ,而不满足 C^1 )通常是非常明显的,因为它显示出一个明显的尖角。二阶导数不连续有时候也是比较明显的。更高阶的不连续性可能是一个要紧的问题,这主要取决于实际的应用。例如,如果曲线代表-定的运动,二阶导数上突变是非常明显的,所以经常会用到三阶导数。如果有液体从曲线上流过去(例如,如果它的形状是飞机的机翼或者是船体),在四阶或五阶导数的不连续可能会引起湍流。
图片来自 《计算机图形学》 Peter Shirley
曲率
假设 f in R^n 是点坐标,0,1,2,...,m(m+1)Points,那么:
- 弧长: \delta s_i = ||f_i - f_(i-1)||, i=1,2,...,m
- 中点单位切向量: \delta f_i = (f_i - f_(i-1)) / \delta s_i ,i=1,2,...,m
这都很容易理解, 毕竟对于光滑的曲线:
- 切向量: T = d r / d s
接下来看曲率:
曲线的曲率(curvature)就是针对曲线上某个点的切线方向角对弧长的转动率,通过微分来定义,表明曲线偏离直线的程度。
当然还有曲率向量的概念:
若某向量模数等于研究点处给定曲线的曲率,而该向量的方向与该点处曲线的主法线方向相同,则称该向量为曲率向量。
所以,
- 顶点处的曲率向量(vertex normal curvature vector):
- \delta^2 f_i = (\delta f_(i+1) - \delta f_i)/ [(\delta s_(i+1) + \delta s_i) /2],i=1,2,...,m-1.
对比连续曲线的曲率向量: \kappa = d T / d s
在此之上,我们可以继续看曲率的微分:
- 曲率向量微分: \delta^3 f_i = (\delta^2 f_i - \delta^2 f_(i-1))/ \delta s_i, i=1,2,...,m
当然其实我们这里的 f_i 已经是很好的离散点了, 想象我们的点并不像我们上图画的这样,而是如下的 P_j :
这种情况我们当然就需要做一些预处理,比如可能出现的浮点预算错误.
当然如果严密一点那么我们需要 normalize,单位化这个次法向量。
挠率的定义是:
在初等三维曲线的微分几何中,一条曲线的挠率(torsion,或译扭率)度量了其扭曲的程度,即偏离平面曲线的程度。
既然挠率的定义是其偏离平面的程度, 所以中点的挠率可以定义成: