离散点曲率计算

1. 单位切向量T\mathbf{T}T

对于一个参数化曲线r(t)=(x(t),y(t))\mathbf{r}(t) = (x(t), y(t))r(t)=(x(t),y(t)),其单位切向量T\mathbf{T}T定义为:

T=r′(t)∥r′(t)∥=(x′(t)(x′(t))2+(y′(t))2,y′(t)(x′(t))2+(y′(t))2)\mathbf{T} = \frac{\mathbf{r}'(t)}{\|\mathbf{r}'(t)\|} = \left( \frac{x'(t)}{\sqrt{(x'(t))^2 + (y'(t))^2}}, \frac{y'(t)}{\sqrt{(x'(t))^2 + (y'(t))^2}} \right)T=∥r′(t)∥r′(t)​=((x′(t))2+(y′(t))2​x′(t)​,(x′(t))2+(y′(t))2​y′(t)​)

这里,x′(t)x'(t)x′(t)和y′(t)y'(t)y′(t)分别是x(t)x(t)x(t)和y(t)y(t)y(t)对参数ttt的一阶导数。

2. 法向量N\mathbf{N}N

法向量N\mathbf{N}N是与T\mathbf{T}T垂直的单位向量,指向曲线凹侧。在二维情况下,可以通过旋转T\mathbf{T}T向量90∘90^\circ90∘来获得N\mathbf{N}N:

N=(−sin⁡(θ),cos⁡(θ))=(−y′(t)(x′(t))2+(y′(t))2,x′(t)(x′(t))2+(y′(t))2)\mathbf{N} = (-\sin(\theta), \cos(\theta)) = \left( -\frac{y'(t)}{\sqrt{(x'(t))^2 + (y'(t))^2}}, \frac{x'(t)}{\sqrt{(x'(t))^2 + (y'(t))^2}} \right)N=(−sin(θ),cos(θ))=(−(x′(t))2+(y′(t))2​y′(t)​,(x′(t))2+(y′(t))2​x′(t)​)

其中,θ\thetaθ是T\mathbf{T}T与xxx-轴之间的夹角。

3. 曲率公式的推导

曲率KKK定义为单位切向量T\mathbf{T}T的变化率对弧长sss的导数:

K=∣dTds∣K = \left|\frac{d\mathbf{T}}{ds}\right|K=​dsdT​​

由于我们通常使用参数ttt而不是弧长sss,因此需要应用链式法则:

K=∣dTdtdtds∣=∣dT/dt∥r′(t)∥∣K = \left|\frac{d\mathbf{T}}{dt}\frac{dt}{ds}\right| = \left|\frac{d\mathbf{T}/dt}{\|\mathbf{r}'(t)\|}\right|K=​dtdT​dsdt​​=​∥r′(t)∥dT/dt​​

接下来,我们考虑T\mathbf{T}T的变化率dTdt\frac{d\mathbf{T}}{dt}dtdT​。根据T\mathbf{T}T的定义,可以写出:

T=(x′(t)∥r′(t)∥,y′(t)∥r′(t)∥)\mathbf{T} = \left( \frac{x'(t)}{\|\mathbf{r}'(t)\|}, \frac{y'(t)}{\|\mathbf{r}'(t)\|} \right)T=(∥r′(t)∥x′(t)​,∥r′(t)∥y′(t)​)

对T\mathbf{T}T求导,利用商法则和链式法则,我们得到:

dTdt=(x′′(t)∥r′(t)∥−x′(t)ddt∥r′(t)∥∥r′(t)∥2,y′′(t)∥r′(t)∥−y′(t)ddt∥r′(t)∥∥r′(t)∥2)\frac{d\mathbf{T}}{dt} = \left( \frac{x''(t)\|\mathbf{r}'(t)\| - x'(t)\frac{d}{dt}\|\mathbf{r}'(t)\|}{\|\mathbf{r}'(t)\|^2}, \frac{y''(t)\|\mathbf{r}'(t)\| - y'(t)\frac{d}{dt}\|\mathbf{r}'(t)\|}{\|\mathbf{r}'(t)\|^2} \right)dtdT​=(∥r′(t)∥2x′′(t)∥r′(t)∥−x′(t)dtd​∥r′(t)∥​,∥r′(t)∥2y′′(t)∥r′(t)∥−y′(t)dtd​∥r′(t)∥​)

注意到∥r′(t)∥=(x′(t))2+(y′(t))2\|\mathbf{r}'(t)\| = \sqrt{(x'(t))^2 + (y'(t))^2}∥r′(t)∥=(x′(t))2+(y′(t))2​,则:

ddt∥r′(t)∥=x′(t)x′′(t)+y′(t)y′′(t)∥r′(t)∥\frac{d}{dt}\|\mathbf{r}'(t)\| = \frac{x'(t)x''(t) + y'(t)y''(t)}{\|\mathbf{r}'(t)\|}dtd​∥r′(t)∥=∥r′(t)∥x′(t)x′′(t)+y′(t)y′′(t)​

将上述结果代入dTdt\frac{d\mathbf{T}}{dt}dtdT​中,并简化表达式,我们最终得到:

dTdt=(x′′(t)∥r′(t)∥2−x′(t)(x′(t)x′′(t)+y′(t)y′′(t))∥r′(t)∥3,y′′(t)∥r′(t)∥2−y′(t)(x′(t)x′′(t)+y′(t)y′′(t))∥r′(t)∥3)\frac{d\mathbf{T}}{dt} = \left( \frac{x''(t)\|\mathbf{r}'(t)\|^2 - x'(t)(x'(t)x''(t) + y'(t)y''(t))}{\|\mathbf{r}'(t)\|^3}, \frac{y''(t)\|\mathbf{r}'(t)\|^2 - y'(t)(x'(t)x''(t) + y'(t)y''(t))}{\|\mathbf{r}'(t)\|^3} \right)dtdT​=(∥r′(t)∥3x′′(t)∥r′(t)∥2−x′(t)(x′(t)x′′(t)+y′(t)y′′(t))​,∥r′(t)∥3y′′(t)∥r′(t)∥2−y′(t)(x′(t)x′′(t)+y′(t)y′′(t))​)

这可以进一步简化为:

dTdt=1∥r′(t)∥3(x′′(t)∥r′(t)∥2−x′(t)2x′′(t)−x′(t)y′(t)y′′(t),y′′(t)∥r′(t)∥2−y′(t)2y′′(t)−x′(t)y′(t)x′′(t))\frac{d\mathbf{T}}{dt} = \frac{1}{\|\mathbf{r}'(t)\|^3} \left( x''(t)\|\mathbf{r}'(t)\|^2 - x'(t)^2x''(t) - x'(t)y'(t)y''(t), y''(t)\|\mathbf{r}'(t)\|^2 - y'(t)^2y''(t) - x'(t)y'(t)x''(t) \right)dtdT​=∥r′(t)∥31​(x′′(t)∥r′(t)∥2−x′(t)2x′′(t)−x′(t)y′(t)y′′(t),y′′(t)∥r′(t)∥2−y′(t)2y′′(t)−x′(t)y′(t)x′′(t))

=1∥r′(t)∥3(x′′(t)(x′(t)2+y′(t)2)−x′(t)2x′′(t)−x′(t)y′(t)y′′(t),y′′(t)(x′(t)2+y′(t)2)−y′(t)2y′′(t)−x′(t)y′(t)x′′(t))= \frac{1}{\|\mathbf{r}'(t)\|^3} \left( x''(t)(x'(t)^2 + y'(t)^2) - x'(t)^2x''(t) - x'(t)y'(t)y''(t), y''(t)(x'(t)^2 + y'(t)^2) - y'(t)^2y''(t) - x'(t)y'(t)x''(t) \right)=∥r′(t)∥31​(x′′(t)(x′(t)2+y′(t)2)−x′(t)2x′′(t)−x′(t)y′(t)y′′(t),y′′(t)(x′(t)2+y′(t)2)−y′(t)2y′′(t)−x′(t)y′(t)x′′(t))

=1∥r′(t)∥3(x′(t)y′′(t)−y′(t)x′′(t),−(x′(t)x′′(t)−y′(t)y′′(t)))= \frac{1}{\|\mathbf{r}'(t)\|^3} \left( x'(t)y''(t) - y'(t)x''(t), -(x'(t)x''(t) - y'(t)y''(t)) \right)=∥r′(t)∥31​(x′(t)y′′(t)−y′(t)x′′(t),−(x′(t)x′′(t)−y′(t)y′′(t)))

可以看到,dTdt\frac{d\mathbf{T}}{dt}dtdT​实际上是沿着法向量N\mathbf{N}N方向的变化,因为它是T\mathbf{T}T的正交补空间中的分量。因此,我们可以将其写成:

dTdt=KN\frac{d\mathbf{T}}{dt} = K \mathbf{N}dtdT​=KN

这里的KKK就是我们要找的曲率,它表示单位切向量沿法向量方向的变化率。结合之前提到的链式法则,我们有:

K=∣dTdtdtds∣=∣dT/dt∥r′(t)∥∣K = \left|\frac{d\mathbf{T}}{dt}\frac{dt}{ds}\right| = \left|\frac{d\mathbf{T}/dt}{\|\mathbf{r}'(t)\|}\right|K=​dtdT​dsdt​​=​∥r′(t)∥dT/dt​​

将dTdt\frac{d\mathbf{T}}{dt}dtdT​的表达式代入,并取模长,我们最终得到:

K=∣x′y′′−y′x′′∣(x′2+y′2)3/2K = \frac{|x'y'' - y'x''|}{(x'^2 + y'^2)^{3/2}}K=(x′2+y′2)3/2∣x′y′′−y′x′′∣​

这就是为什么我们可以用∣dx⋅ddy−dy⋅ddx∣(dx2+dy2)3/2\frac{|dx \cdot ddy - dy \cdot ddx|}{(dx^2 + dy^2)^{3/2}}(dx2+dy2)3/2∣dx⋅ddy−dy⋅ddx∣​来计算曲率的原因。这种形式不仅简洁而且便于数值计算,尤其是在处理离散数据点时。

总结

通过上述推导,我们从单位切向量T\mathbf{T}T和法向量N\mathbf{N}N的关系出发,逐步构建了曲率的表达式。这个过程展示了如何从几何直观过渡到具体的数学公式,揭示了曲率作为描述曲线弯曲程度的关键概念。这种方法不仅适用于理论分析,也广泛应用于实际工程和技术领域中的曲线拟合和形状分析。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐