空间曲线

来自集智百科 - 复杂系统|人工智能|复杂科学|复杂网络|自组织
跳到导航 跳到搜索

空间曲线是微分几何中一个非常基础,而又非常重要的概念。下面,我们将以三维空间中的空间曲线为主体讨论相关的一些概念,然后再考虑推广到n维空间。

定义

空间曲线

所谓的一条三维空间曲线,就是一个映射[math]\displaystyle{ \alpha: I\rightarrow R^3 }[/math],这里 I是实数轴上的某种区间(如[math]\displaystyle{ (0,1), (a,b), [a,b], (-\infty,a],[0,1] }[/math]等等)。由于[math]\displaystyle{ \alpha }[/math]的值域是[math]\displaystyle{ R^3 }[/math],那么[math]\displaystyle{ \alpha }[/math]的输出就包含三个坐标。我们可以将[math]\displaystyle{ \alpha }[/math]写成参数化的形式:

[math]\displaystyle{ \alpha(t)=(\alpha^1(t),\alpha^2(t),\alpha^3(t)) }[/math]

这里[math]\displaystyle{ \alpha^i }[/math]本身都是一个函数,即[math]\displaystyle{ \alpha^i:I\rightarrow R }[/math]。我们可以将t理解成时间,这样[math]\displaystyle{ \alpha(t) }[/math]就是一个粒子在空间中的运动轨迹。

速度

如果[math]\displaystyle{ \alpha }[/math]理解为粒子的轨迹,那么[math]\displaystyle{ \alpha'(t_0) }[/math]就是粒子在时刻[math]\displaystyle{ t_0 }[/math]的速度。我们可以推广这个概念,对于任意空间曲线[math]\displaystyle{ \alpha(t) }[/math],我们定义速度向量为:

[math]\displaystyle{ \alpha'(t_0)=\left ( \frac{d \alpha^1 }{dt}\Big |_{t=t_0},\frac{d \alpha^2 }{dt}\Big |_{t=t_0},\frac{d \alpha^3}{dt}\Big |_{t=t_0}\right ) }[/math]

弧长参数化

在空间曲线的定义中,参数t可以是任意的实数区间。在这里,我们可以选择一个特殊的参数s为从曲线某点出发,沿着曲线运动的自然弧长。这样,用这个弧长来作为参数的曲线方程[math]\displaystyle{ \alpha(s) }[/math]就为曲线的弧长参数化表示。

可以证明,用弧长参数化方法定义的曲线方程在任意点上的速度都是1。下面给出证明。首先,根据微积分,对于定义在任意参数t上的曲线[math]\displaystyle{ \alpha(t) }[/math]的弧长计算公式为:

[math]\displaystyle{ s(t)=\int_0^t |\alpha'(u)|du }[/math]

其中,t为任意的时刻,s(t)为粒子从a时刻运动到t时刻所经历的弧长。这样,我们有:

[math]\displaystyle{ \frac{ds}{dt}=|\alpha'(t)|\gt 0 }[/math]

所以,s为I上的严格增函数,s也是一个一一映射,所以s必然存在着反函数,我们将反函数记为[math]\displaystyle{ t(s) }[/math],同时t(s)的导数就与s(t)的导数存在着如下的关系:

[math]\displaystyle{ \frac{dt}{ds}(s)=\frac{1}{\frac{ds}{dt}(t(s))}\gt 0 }[/math]

我们设[math]\displaystyle{ \beta(s)=\alpha(t(s)) }[/math]。这样,由于[math]\displaystyle{ \beta'(s)=\alpha'(t(s))\frac{dt}{ds}(s) }[/math]。但是,我们有:

[math]\displaystyle{ |\beta'(s)|=|\alpha'(t(s))|\cdot |\frac{dt}{ds}(s)|=\frac{ds}{dt}(t(s))\frac{dt}{ds}(s)=\frac{ds}{dt}(t(s))\frac{1}{\frac{ds}{dt}(t(s))}=1 }[/math]

这里[math]\displaystyle{ \beta(s) }[/math]实际上就是该曲线的弧长参数化表示。因此,我们知道它在整个定义区间上都有常数速度。

Frenet框架

下面我们考虑随着s的增长,弧长参数化的曲线[math]\displaystyle{ \beta(s) }[/math]将如何随之变化,我们定义三个向量分别是曲线的切向量、法向量和副法向量。

切向量

首先,切向量就定义为曲线运动的瞬时方向,也即曲线在t时刻的瞬时速度。

[math]\displaystyle{ T=\frac{d\beta(s)}{d s} }[/math]

由于s是弧长参数,所以|T|=1,即T是一个单位向量。

法向量

其次,我们定义曲线在s点处的法向量为:

[math]\displaystyle{ T'=\frac{dT(s)}{ds} }[/math]

可以证明法向量T'与切向量T相垂直。下面给出证明:

因为[math]\displaystyle{ 0=(T\cdot T)'=T'\cdot T+T\cdot T'=2T\cdot T' }[/math],于是[math]\displaystyle{ T\cdot T'=0 }[/math]也就是说T和T'垂直。

另外,我们定义T'的长度

[math]\displaystyle{ \kappa(s)=|T'(s)| }[/math]

为曲线在s处的曲率。一般情况下T'(s)并不是单位向量,这不方便我们的讨论,我们将归一化的法向量定义为曲线在s处的主法向向量:

[math]\displaystyle{ N(s)=\frac{1}{\kappa(s)}T'(s) }[/math]

N就是曲线的主法向向量。

副法向量

最后,我们定义T和N的叉乘为副法向量:

[math]\displaystyle{ B=T\times N }[/math]

不难验证B和T以及N都垂直,而且B是单位向量。

Frenet 框架

我们不难看到无论s取什么数值,T,N,B都是彼此垂直的单位向量。因此,这三个变量一起可以构成一个直角坐标系,我们称[math]\displaystyle{ \{T,N,B\} }[/math]为Frenet框架。可以想象,曲线在随着s运动的过程中,这个框架就会随之扭转,它们标示出来曲线的几何性质。

我们也可以将这三个变量所张成的框架理解为一个新的向量空间,所有的变量都可以写成这三个向量的线性组合。例如,我们可以将向量B'写成这三个向量的线性组合。

[math]\displaystyle{ B'=a T+b N + c B }[/math]

其中a,b,c就是线性组合的相应系数。下面,我们就来求出这三个系数。

根据线性代数,a就是B'与T的内积。由于[math]\displaystyle{ T\cdot B=0 }[/math],所以[math]\displaystyle{ 0=(T\cdot B)'=T'\cdot B+T\cdot B' }[/math]。于是[math]\displaystyle{ T\cdot B'=-T'\cdot B=-\kappa N \cdot B=0 }[/math]。所以a=0.

运用类似的技巧,我们可以求出c=0,而[math]\displaystyle{ b=B'\cdot N }[/math]却不为0。我们定义

[math]\displaystyle{ \tau=-B'\cdot N }[/math]

为曲线的挠度(torsion)。所以,总结来看:

[math]\displaystyle{ B'=-\tau N }[/math]

运用同样的道理,我们可以获得T',N',B'这三个向量在Frenet框架下的线性表达:

[math]\displaystyle{ \begin{align} &T'=\kappa N \\ &N'=-\kappa T +\tau B\\ &B'=-\tau N\\ \end{align} }[/math]

这是曲线理论中的一个基本定理,该公式被称为Frenet公式。

例子

让我们考虑一条空间螺旋线: [math]\displaystyle{ \beta(s)=(a \cos(s/c), a \sin(s/c), bs/c) }[/math],其中[math]\displaystyle{ c=\sqrt{a^2+b^2} }[/math]

这里的a代表螺旋曲线在XY平面投影上的圆的旋转半径,b对应了在z轴上上升的速度。当[math]\displaystyle{ s=2\pi c }[/math]的时候,XY投影上的圆就刚好转一圈。沿着z轴刚好上升[math]\displaystyle{ 2\pi b }[/math],而在XY面上投影的圆的运行弧长刚好是[math]\displaystyle{ 2 \pi a }[/math],所以这三者之间应该满足关系[math]\displaystyle{ c^2=a^2+b^2 }[/math]

根据这个方程,我们可以计算得到:

[math]\displaystyle{ T=\beta'(s)=(-(a/c) \sin (s/c), (a/c) \cos(s/c),b/c) }[/math]

以及

[math]\displaystyle{ T'=(-(a/c^2) \cos(s/c),-(a/c^2) \sin(s/c),0)=(a/c^2)(-\cos(s/c),-\sin(s/c),0)=(a/c^2)N }[/math]

于是,曲线的曲率为常数[math]\displaystyle{ \kappa=a/c^2=\frac{a}{a^2+b^2} }[/math]

最后,我们可以得到:

[math]\displaystyle{ \begin{align} &T=(-\frac{a}{c} \sin (\frac{s}{c}), \frac{a}{c} \cos (\frac{s}{c}), \frac{b}{c})\\ &N=(-\cos(\frac{s}{c}),-\sin(\frac{s}{c}),0)\\ &B=T\times N=(\frac{b}{c} \sin(\frac{s}{c}), -(\frac{b}{c} \cos(\frac{s}{c})), \frac{a}{c})\\ \end{align} }[/math]

与此类似,我们可以计算出曲线的挠度为:

[math]\displaystyle{ \tau=b/c^2 }[/math]

下面的动画展示了随着时间参数t变化,三种不同的向量:切向量T(蓝色)、法向量N(绿色),和副法向量B(红色)的演化。

400px

特殊情况

下面,我们考虑两种特殊情况。

  • 首先,我们不妨设b=0,此时我们发现,曲线就退化成了一个平面上的圆,而且,曲线的挠度就是0,曲率刚好是1/a,即圆的半径倒数。
  • 其次,我们可以让a无限趋近于0,这样的话,曲线就趋近为一条[math]\displaystyle{ z=\frac{b}{c}s }[/math]的直线。此时,曲率等于0,挠度也等于0。

关于曲率与挠度的直观认识

一般的,我们可以证明,当且仅当空间曲线为一条直线的时候,曲线的曲率才为0;而当且仅当曲线位于一张平面的时候,曲线的挠度才是0。所以,总结来看,曲率衡量的是一条曲线偏离直线的程度,而挠度计算的是一条曲线偏离一张平面的程度。

非单位速度下的曲线

当我们采用一般参数方程[math]\displaystyle{ \alpha(t) }[/math]的时候,曲线的速度就不是单位速度了。那么这种情况下的Frenet公式就变成了:

[math]\displaystyle{ \begin{align} &T'(t)=\kappa \nu N\\ &N'(t)=-\kappa \nu T + \tau \nu B\\ &B'(t)=-\tau\nu N \end{align} }[/math]

这里,其它参数的含义不变,而[math]\displaystyle{ \nu=ds/dt }[/math]为曲线的速度。

参考文献

  1. John Oprea: Differential Geometry and Its Applications,Pearson Education, 2004