曲率、挠率的离散推广

ref:https://zhuanlan.zhihu.com/p/179438855

Author:二圈妹

曲率、挠率等概念的离散推广。在很多场景中我们会用到曲率、挠率。

比如狄利克雷能量(Dirichlet Energy)是平滑界(smoothing)的常客:

连续

先硬插一点info,因为构建离散曲线,大部分时间都一段一段连起来,曲线的连续性,有 C(continuity) 和 G(geometry continuity)字母来代表, 如果一段一段之间的导数是到 n 阶都能匹配的,那么我们说它是 C^n连续的,比如:

 

  • C0: 仅连接
  • C1: 切线和切线的导数一致
  • C2: 曲率一致

曲率、挠率的离散推广_第1张图片

 

G则代表我们仅需n阶导成比例: 比如 G1 代表切线方向一致,大小可能不同。

 图是一些连续性条件的示意图。一阶导数不连续( 曲线满足 C^0 ,而不满足 C^1 )通常是非常明显的,因为它显示出一个明显的尖角。二阶导数不连续有时候也是比较明显的。更高阶的不连续性可能是一个要紧的问题,这主要取决于实际的应用。例如,如果曲线代表-定的运动,二阶导数上突变是非常明显的,所以经常会用到三阶导数。如果有液体从曲线上流过去(例如,如果它的形状是飞机的机翼或者是船体),在四阶或五阶导数的不连续可能会引起湍流。

曲率、挠率的离散推广_第2张图片

图片来自 《计算机图形学》 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

曲率、挠率的离散推广_第3张图片

 

这都很容易理解, 毕竟对于光滑的曲线:

  • 切向量: 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.

曲率、挠率的离散推广_第4张图片

 

对比连续曲线的曲率向量: \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

曲率、挠率的离散推广_第5张图片

 

曲率、挠率的离散推广_第6张图片

 

当然其实我们这里的 f_i 已经是很好的离散点了, 想象我们的点并不像我们上图画的这样,而是如下的 P_j :

曲率、挠率的离散推广_第7张图片

 

这种情况我们当然就需要做一些预处理,比如可能出现的浮点预算错误.

曲率、挠率的离散推广_第8张图片

当然如果严密一点那么我们需要 normalize,单位化这个次法向量。

挠率的定义是:

在初等三维曲线的微分几何中,一条曲线的挠率(torsion,或译扭率)度量了其扭曲的程度,即偏离平面曲线的程度。

既然挠率的定义是其偏离平面的程度, 所以中点的挠率可以定义成:

曲率、挠率的离散推广_第9张图片

 

你可能感兴趣的:(人工智能,算法,c/c++)