美文网首页程序员
【PBRT】补充知识——曲线和曲面的微分几何

【PBRT】补充知识——曲线和曲面的微分几何

作者: 闪电的蓝熊猫 | 来源:发表于2019-11-03 20:00 被阅读0次

    pbrt的实现中,对球体进行了建模,而球的表面是曲面,所以,表示球面就用到了球的曲面参数方程。不仅如此,反走样技术中用到了曲面的其他属性(比如说曲率),所以,我就专门学了曲线和曲面的相关知识,在此做一个总结,复习学到的内容,并且希望能对想要连接曲线和曲面相关知识的读者有所帮助。

    由于作者水平所限,文中如果有错误或者没有解释到位的地方,还请读者不吝指正。

    本文主要讨论的内容是:可微参数曲线的定义、曲线的曲率、曲线的扰率、正则曲面的定义、第一基本形式、第二基本形式。

    可微参数曲线

    在实践过程中,我们要处理的大多数曲线都是参数曲线,而且都是可微的,所以,给一个参数曲线的定义不如给一个可微参数曲线的定义。下面是可微参数曲线的定义:

    可微参数曲线是一种将R域上的开区间I = (a, b)内的元素,转换成R^3域内的元素的可微映射,记作\alpha : I \to R^3

    从定义中可以看出,曲线本质上是一种对应关系,这种对应可以看成是一种函数,把一维空间中的元素映射到三维空间中去。那么显示生活中,啥东西是一维的呢?想来想去,只有一个东西是一维的,那就是时间!所以,参数曲线也可以看成是,一个点在三维空间中随着时间运动的轨迹

    来看一个参数曲线的例子——螺旋线


    螺旋线的参数方程是,其中和都是标量。

    曲线的切向量

    曲线在某一点的切线意味着其在当前点的运动方向和速度,对研究曲线来说,切向量非常重要,几乎所有的定理或者公式都有切向量,所以,它是既曲线的定义之后,第二大重要的概念。

    切向量的定义是:

    如果曲线\alpha(t)是可微参数曲线,那么它的一阶导数\alpha'(t)就是曲线\alpha在点t出的切向量

    这个很容易理解,在学习微积分的时候,如何理解导数就是瞬时速度(虽然瞬时速度在现实生活中是不存在的),在一小段时间内,小车行驶的距离与这段时间的比值,不断将这段时间缩短,取其极限就成了瞬时速度。把这个概念用到曲线上,曲线的切向量就是这样推导出来的(上图中的\alpha'(t)就是t点的切向量)。

    曲线的弧长

    计算曲线的弧长需要用到曲线的切向量,如果曲线在某一点没有切向量,这种曲线我们没法处理,而之前定义的可微参数曲线就解决了这个问题,可微参数曲线保证曲线是处处可导的(有切向量)。

    但是光可微还不够,我们还需要一个条件,那就是曲线的一阶导数不为0。这就引出了正则曲线的定义。

    如果\alpha(t) : I \to R^3是可微参数曲线,其一阶导数在整个定义域I上处处不为0,我们就说这条曲线是正则曲线

    然后,弧长的计算公式如下:

    s(t) = \int_{t_0}^{t}|\alpha'(u)|du

    这里不用a(t)来表示是因为这个公式中只有一个变量那就是t,而t是积分的上限,其余的比如t_0u在这个式子中都不是变量。所以s(t)本质上是一个关于积分上限t的函数。

    我们不妨这么来看,令f(u) = |a'(u)|,则积分等式右边变成了\int_{t_0}^{t}f(u)du,然后f(u)积分之后变成F(u),于是弧长计算公式就变成:
    s(t) = \left.F(u)\right|_{t_0}^{t}
    也就是s(t)=F(t) - F(t_0),因为t_0是一个常量,所以整个式子就是一个关于t的函数。

    还有一点要注意的是,对|\alpha'(u)|积分之后,跟\alpha(u)没有半毛钱关系,也就是说\int_{t_0}^{t}|\alpha'(u)|du不能表示成\left.|\alpha(u)|\right|_{t_0}^{t},取\alpha'(u)的长度会把表达式变成一个完全不同的函数,和\alpha(u)不再有什么关系。

    曲线的曲率

    对一条曲线来说,我们很自然地会去考虑,这条曲线到底有多“曲”?那么,在数学上,怎么表示这个弯曲程度呢?答案是:曲率

    下面是曲率的定义:

    \alpha:I \to R^3是一条正则参数曲线,其参数为s,且参数s恰好是曲线的弧长,那么曲线\alpha(s)的曲率是|\alpha''(s)|,记作\kappa(s)

    乍一看,曲率的定义过于苛刻了,因为它要求曲线的参数正好是其弧长,这点似乎很难办到,但是我们在实际的应用过程中,这点还是比较容易办到的,因为:

    对于任何正则参数曲线来说,都可以把它化作以弧长为参数的形式。

    也就是说如果我有一条曲线,就说是\alpha(t)吧,这个t不是弧长。我可以找到一条曲线\beta(s),使得这个s正好是\alpha(t)的弧长。并且,这个\beta(s)\alpha(t)是同一条曲线!然后,曲率的定义就可以在\beta(s)上应用了,因为它喝\alpha(t)是同一条曲线,所以\beta(s)的曲率也就是\alpha(t)的曲率。

    以弧长为参数的曲线还有一个好处,就是\alpha''(s)\alpha'(s)是垂直的。因为假如我们用弧长计算公式去计算的话,我们得到的结果是S(s)=\int_{s_0}^{s}|\alpha'(u)|du,这个正好等于s,也就是说|\alpha'(u)|正好是1,并且恒等于1。即
    |\alpha'(s)|=1
    成立。那么我们可以得到\alpha'(s) \bullet \alpha'(s)=1,对等式两边求导(运用乘积公式)得\alpha''(s)\bullet\alpha'(s)+\alpha'(s)\bullet\alpha''(s)=0,化简得\alpha''(s)\bullet\alpha'(s)=0
    也就是说\alpha''(s)\alpha'(s)是垂直的。

    曲率的几何意义

    现在我们知道曲线有多“曲”了,它的弯曲程度是\kappa(s),这是一个标量。那么,它的几何意义是什么?

    我们可以很直观地想到,如果\kappa(s)越大,那么这条曲线在点s的附近就会越弯曲。所以,曲率的几何意义就是,当s增加一个微小量\Delta{s}之后,曲线\alpha(s)在垂直于\alpha'(s)的方向上(也就是\alpha''(s)方向上)增加了多少。这与我们对弯曲程度的概念是一致的!

    曲线的扰率

    对曲线来说,曲率是沿着\alpha''(s)方向弯曲的程度,\alpha''(s)\alpha'(s)垂直,也就是说\alpha''(s)\alpha'(s)共同组成了一个平面。曲率是曲线在这个平面上的变化程度。

    那么,如果我的曲线\alpha(s)是三维空间中的一条曲线,只有曲率怕是不够的吧?没错,这就引出了另一个概念:扰率

    下面是关于扰率的计算过程:

    令曲线\alpha(s)是以弧长为参数的正则曲线,t(s)=\alpha'(s),则其曲率为\kappa(s)=|\alpha''(s)|=|t'(s)|
    n(s)=\frac{1}{\kappa(s)}\alpha''(s)=\frac{t'(s)}{|t'(s)|},即,n(s)是单位\alpha''(s),则
    b(s)=t(s)\times{n(s)} \quad\quad (1)
    由等式1可以推导得到:
    n(s)=b(s)\times{t(s)} \quad\quad (2)
    显然,b(s)是单位向量。那么就有
    b'(s)\bullet{b(s)}=0 \quad\quad (3)
    对式2两边求导可得b'(s)=t'(s)\times{n(s)}+t(s)\times{n'(s)}很明显,t'(s)n(s)是线性相关的,所以它们的叉积是0向量,所以,我们的等式可以化简为
    b'(s)=t(s)\times{n'(s)} \quad\quad (4)
    通过观察等式3和等式4我们可以知道,b'(s)b(s)是垂直的,b'(s)t(s)是垂直的,在观察等式2就可以得出结论b'(s)n(s)是线性相关的,也就是说b'(s)可以表示成
    b'(s) =\tau{n(s)}
    这个\tau就是曲线的扰率

    很复杂的推理过程,比\kappa要复杂地多。扰率的几何意义是,在垂直于\alpha'(s)\alpha''(s)形成的平面的方向上,曲线的“弯曲”程度,也就是空间的第三个维度上的变化情况。


    就是上图中方向上的变化情况。

    正则曲面的定义

    同样,从实际应用的角度出发,跟找曲面的意义相比,找正则曲面的意义更大。所以,下面要给出正则曲面的定义,说实话,正则曲面的定义比曲线的定义复杂很多,但是,复杂就不学了吗?

    正则曲面的定义如下:

    假设有一个R^3的子集S,如果对于S上的每一点p,都可以找到一个邻域VV\subset{R^3}),和一个映射x:U\to{V}\cap{S},其中UR^2上的开集,V\cap{S}VS的交集,显然V\cap{S}\subset{R^3},满足如下的条件:
    1、x是可微的。这就表示x(u,v)的各阶偏导数都存在。
    2、x是同胚映射。和条件1结合起来,这就意味着x有一个逆映射x^{-1}使得V\cap{S}\to{U},并且x^{-1}是连续的。
    3、对每一个q\in{U},微分运算dx_q:R^2\to{R}^3是一一对应的。
    那么,这个子集S就是一个正则曲面。


    研究研究定义就可以发现,数学上的曲面定义好苛刻啊。最苛刻的地方在于,它必须要有的映射关系,如果我们凭空绘制一个曲面,哪来的这种关系可以对应?更何况这映射还需要满足3个条件!

    我们来仔细看看正则曲面的定义。首先,S上的一点p的邻域V是一个球,它和S的交集就是S的一个子集(注意还不能认为S是一个曲面,所以交集就不能认为是一个面片)。然后,S的这个子集和U有着一一对应的关系。最后,这种对应关系还需要满足1,2,3的条件。如此这般之后,S才能被称为是一个正则曲面。

    第一基本形式

    想要定义第一基本形式,先得定义曲面的切线空间的概念。

    下面定义切线空间:

    x(u,v)是一个正则参数曲面,则点p\in{S}处的切线空间是向量x_ux_v所张成的向量空间,其中x_ux_v分别是x关于uv的偏导数。

    有了切线空间的定义,我们就能定义曲面的第一基本形式了:

    w是正则曲面S在点p处的向量空间中的一个向量,则曲面的第一基本形式为:<w, w>,其中<,>符号表示两个向量的内积。

    上面这个定义不好理解,我们举个例子说明一下就好了:
    假设我们有一个正则曲面S,它上面有一条参数曲线\alpha(t)=x(u(t), v(t)),点p=\alpha(0)=x(u_0, v_0)处的第一基本形式是:
    <\alpha'(0), \alpha'(0)>\quad=\quad<x_u{u'} + x_v{v'}, x_u{u'}+x_v{v'}>
    \quad=\quad<x_u, x_u>(u')^2 + 2<x_u, x_v>u'v'+<x_v, x_v>(v')^2
    =E(u')^2+2Fu'v'+G(v')^2
    其中,
    E\quad=\quad<x_u,\quad x_u>
    F\quad=\quad<x_u,\quad x_v>
    G\quad=\quad<x_v,\quad x_v>
    所以,S在点p处的第一基本形式是:E(u')^2+2Fu'v'+G(v')^2。通常,我们都把这种样子的东西叫做第一基本形式,而E,F,G被称为第一基本形式的系数!

    注意:虽然有一些资料上说是曲面的第一基本形式,但是这是错误的叫法,曲面根本就没有什么第一基本形式,这只是曲面上的一点的第一基本形式,因为我们完全可以看出,这个式子计算出来的是一个标量,根本就不是曲面上的点!

    第一基本形式的作用是计算曲面上曲线的长度,两条曲线交点切向量的夹角,或是某一块曲面片的面积。

    第二基本形式

    同第一基本形式一样,第二基本形式也不是曲面的,而是曲面上一点的。第二基本形式的几何意义是,曲面在当前这个点上的曲率是多少,也就是曲面在这点上有多“曲”。

    第二基本形式的计算方法如下:

    令曲面S=x(u,v)是正则曲面,在点p处的标准单位法线为\mathrm{N}=\frac{x_u\times{x_v}}{|x_u\times{x_v}|},则曲面S在点p处的第二基本形式是edu^2+2fdudv+gdv^2,其中e=x_{uu}\bullet \mathrm{N},f=x_{uv}\bullet \mathrm{N},g=x_{vv}\bullet\mathrm{N}x_{uu}x关于u的二阶偏导数,依次类推。e, f, g被称为第二基本形式的系数。

    从式子中也可以看出来,这玩意儿就是一个标量而已。所以,我不喜欢把它叫成曲面的第二基本形式,因为这会产生很大的歧义,仿佛这是曲面的表达式似的。

    第二基本形式的产生思路是这样子的。前面我们研究曲线的时候,计算了曲线的曲率,有了一个量来表示曲线有多“曲”,那么自然地,我们也会想知道一个曲面有多“曲”,这就引出了第二基本形式。

    第二基本形式是曲面上两点之间,法向量方向上的距离,如下图所示:


    下面来推导这个第二基本形式。首先,假设曲面的参数形式是,曲面上一点p的坐标是,我们要求图中d的长度:,这个公式非常简单。难的是下面这步:
    我们可以把用泰勒多项式展开,得到在点(0,0)附近的曲面的近似多项式曲面,就会得到:

    其中是余项。当u和v的值趋近于0的时候,余项可以舍弃掉。
    于是,我们得到

    将这个式子带入到求的公式中


    因为法向量垂直于切平面,所以和的值都是0,可以消去,所以我们得到了上面的式子。把放到括号里去,然后微小变化量我们通常用表示,就得到了第二基本形式
    另一种第二基本形式的表示方式

    另外一种第二基本形式的表示方式,可以说是一种巧合,因为它没有什么几何意义。我们来看:
    因为<x_u, N>=0,对这个式子两边求导我们可以得到
    <x_{uu}, N> + <x_u, N_u> = 0
    <x_{uv}, N> + <x_u, N_v> = 0
    <x_v, N>=0两边求导可得
    <x_{vu}, N> + <x_v, N_u>=0
    <x_{vv},N>+<x_v, N_v>=0
    这就说明
    e=<x_{uu},N>=-<x_u,N_u>
    f=<x_{uv},N>=-<x_u,N_v>=-<x_v,N_u>
    g=<x_{vv},N>=-<x_v,N_v>
    这就是说
    -dx*dN=-(x_udu+x_vdv)*(N_udu+N_vdv)
    -dx*dN=-x_uN_udu^2+(-x_uN_v)dudv+(-x_vN_u)dudv+(-x_vN_v)dv^2=Ldu^2+2Mdudv+Ndv^2
    没错,就是这么巧。也就是说
    -dx*dN
    也是第二基本形式。

    为啥没意义呢?因为dx可以看成是x的某一个切向量,而dN可以看成是N的切向量(如果N看成是一个单位球的曲面的话,也可以说是高斯映射,当然,这是不正经定义),那么两个切向量的点积,还要求相反数,这就没有啥意义了。当然,这只是我个人的理解,如果读者有更好的理解的话,请留言告诉我,谢谢!

    总结

    说实话,这些定义都是非常基本的但是要理解这些东西也并不容易,其中的有一些概念可以扩展延伸成更有用的概念,在这里就不整理了,因为,只要这些基本的概念在,就不虚!

    参考资料

    Differential Geometry of Curves and Surfaces, by do Carmo
    Elemetary Diffential Geometry Second Edition, by Andrew Pressley

    相关文章

      网友评论

        本文标题:【PBRT】补充知识——曲线和曲面的微分几何

        本文链接:https://www.haomeiwen.com/subject/vbjcbctx.html