计算机图形学 第五章 曲线与曲面(上)

第五章 曲线与曲面

第五章占40分左右

5.1 曲线曲面的参数表示

直线段: P ( t ) = P 1 + ( P 2 − P 1 ) t t ∈ [ 0 ,   1 ] P(t)=P_1+(P_2-P_1)t\quad t\in[0,\,1] P(t)=P1+(P2P1)tt[0,1] ,端点为 P 1 P_1 P1 P 2 P_2 P2

圆: P ( t ) = [ 1 − t 2 1 + t 2   2 t 1 + t 2 ] P(t)=[\frac{1-t^2}{1+t^2} \, \frac{2t}{1+t^2}] P(t)=[1+t21t21+t22t]

参数曲线:位置矢量、切矢量、法矢量、曲率和挠率

这五个量对推导和计算都不作要求,单选择题可能考概念,要理解他们的意义

参数表示三维曲线: 有界点集、带参数、连续的、单值函数 x = x ( t ) ,   y = y ( t ) ,   z = z ( t ) x=x(t),\, y=y(t),\, z=z(t) x=x(t),y=y(t),z=z(t) (往往 t ∈ [ 0 ,   1 ] t\in[0,\,1] t[0,1]

位置矢量: 曲线上任意一点位置矢量可表示为 P ( t ) = [ x ( t ) ,   y ( t ) ,   z ( t ) ] P(t)=[x(t),\,y(t),\,z(t)] P(t)=[x(t),y(t),z(t)] ,其 k k k 阶导数矢量(如果存在的话)可表示为: P k ( t ) = d k P d t k P^k(t)=\frac{d^kP}{dt^k} Pk(t)=dtkdkP

切矢量: T = P ′ ( t ) ∣ P ′ ( t ) ∣ T=\frac{P'(t)}{|P'(t)|} T=P(t)P(t) ,切线方程: x − x 0 x ′ ( t ) = y − y 0 y ′ ( t ) = z − z 0 z ′ ( t ) \frac{x-x_0}{x'(t)}=\frac{y-y_0}{y'(t)}=\frac{z-z_0}{z'(t)} x(t)xx0=y(t)yy0=z(t)zz0

法矢量:

  • 主法矢: N = T ′ ( t ) ∣ T ′ ( t ) ∣ = P ′ ′ ( t ) ∣ P ′ ′ ( t ) ∣ N=\frac{T'(t)}{|T'(t)|}=\frac{P''(t)}{|P''(t)|} N=T(t)T(t)=P′′(t)P′′(t) ,与 d T d s \frac{dT}{ds} dsdT 平行
  • 副法矢: B = T × N = P ′ ( t ) P ′ ′ ( t ) ∣ P ′ ( t ) P ′ ′ ( t ) ∣ B=T\times N=\frac{P'(t)P''(t)}{|P'(t)P''(t)|} B=T×N=P(t)P′′(t)P(t)P′′(t)
  • 法平面: N N N B B B 构成的平面,方程为: x ′ ( t ) ( x − x 0 ) + y ′ ( t ) ( y − y 0 ) + z ′ t ( z − z 0 ) = 0 x'(t)(x-x_0)+y'(t)(y-y_0)+z't(z-z_0)=0 x(t)(xx0)+y(t)(yy0)+zt(zz0)=0
  • 密切平面: T T T N N N 构成的平面
  • 从切平面 / 化直平面: B B B T T T 构成的平面
5_9 5_13

曲率: k k k ,其几何意义是曲线的单位切矢对弧长的转动率

  • 曲率越小,曲线越平坦;曲率越大,曲线越弯曲

  • 曲率半径 ρ = 1 k \rho=\frac{1}{k} ρ=k1

挠率: τ \tau τ ,其绝对值等于副法线方向(或密切平面)对于弧长的转动率

  • 挠率大于0、等于0和小于0分别表示曲线为右旋空间曲线、平面曲线和左旋空间曲线

k = ∣ P ′ ( t ) × P ′ ′ ( t ) ∣ ∣ P ′ ( t ) ∣ 3 τ = d e t ( P ′ ( t ) , P ′ ′ ( t ) , P ′ ′ ′ ( t ) ) ∣ P ′ ( t ) × P ′ ′ ( t ) ∣ 2 k=\frac{|P'(t)\times P''(t)|}{|P'(t)|^3}\quad\quad\tau=\frac{det(P'(t),P''(t),P'''(t))}{|P'(t)\times P''(t)|^2} k=P(t)3P(t)×P′′(t)τ=P(t)×P′′(t)2det(P(t),P′′(t),P′′′(t))

插值、逼近、拟合和光顺

(70-80%的概率会考);要会计算插值曲线;要能写出最小二乘法公式和偏导为0

**插值:**给定一组有序的 数据点(型值点) P i   ( i = 0 , 1 , . . . , n ) P_i\,(i=0,1,...,n) Pi(i=0,1,...,n) ,构造一条曲线顺序通过这些数据点:(下面两种插值算法都是在平面上的)

  • 线性插值:给定函数 f ( x ) f(x) f(x) 两个不同点的坐标,用直线 y = k x + b y=kx+b y=kx+b 去近似代替 f ( x ) f(x) f(x) (即求过这两点的直线方程,两个未知数两个方程)
  • 抛物线插值(二次插值):给定函数 f ( x ) f(x) f(x) 三个不同点的坐标,用一个抛物线 y = a x 2 + b x + c y=ax^2+bx+c y=ax2+bx+c 去近似代替 f ( x ) f(x) f(x) (即求过着三点的直线方程,三个未知数三个方程)
5_32

逼近: 不需要通过所有数据点(型值点),用最小二乘法算出最小误差:给出一组数据点(型值点) P i   ( i = 0 , 1 , . . . , n ) P_i\,(i=0,1,...,n) Pi(i=0,1,...,n) ,构造一个 m ( m < n − 2 ) m(m\lt n-2) m(m<n2) 次多项式 y = F ( x ) = ∑ j = 0 m a j x j y=F(x)=\sum\limits_{j=0}^ma_jx^j y=F(x)=j=0majxj 逼近,误差为:
φ = ∑ k = 0 n d k [ ∑ j = 0 m a j x j − y k ] 2 ∂ φ ∂ a i = 0 ,   i = 0 , 1 , . . . , m \varphi=\sum\limits_{k=0}^nd_k[\sum\limits_{j=0}^ma_jx^j-y_k]^2 \\ \frac{\partial \varphi}{\partial a_i}=0,\,i=0,1,...,m φ=k=0ndk[j=0majxjyk]2aiφ=0,i=0,1,...,m
权重 d k ≥ 0 d_k\ge0 dk0 ,对可靠的点赋予较大的比重;通过偏导为 0 0 0 求出每个 a i a_i ai

拟合: 插值和逼近统称为拟合

光顺: 指曲线的拐点不能太多,相对光顺的条件是:

  • 具有二阶集合连续性( G 2 G^2 G2
  • 不存在多余拐点和奇异点
  • 曲率变化较小

参数化

需要在型值点与插值曲线的参数域 t ∈ [ t 0 ,   t 1 ] t\in[t_0,\,t_1] t[t0,t1] 之间建立映射关系,每个被映射到的参数值称为节点

了解概念就可以,要会写累加现场参数化的 Δ P j − 1 \Delta P_{j-1} ΔPj1

  • 对型值点参数化
  • 均匀参数化(等距参数化):相邻节点区间长度相等
  • 累加弦长参数化:相邻节点区间长度按弦长分布
  • 向心参数化法:在累加弦长法的基础上,考虑相邻弦边的拐折情况
  • 修正弦长参数化法:在累加弦长法的基础上,给弦长加上某一修正系数
  • 参数区间规格化:将参数区间 [ t 0 ,   t n ] [t_0,\,t_n] [t0,tn] 变为 [ 0 ,   1 ] [0,\,1] [0,1]

参数曲线的代数和几何形式

(很可能考,给出代数形式,算出几何形式,要现场算并粗略地画出调和函数的示意图,6分简答题)

以三次参数曲线为例,其代数形式为:
{ x ( t ) = a 3 x t 3 + a 2 x t 2 + a 1 x t + a 0 x y ( t ) = a 3 y t 3 + a 2 y t 2 + a 1 y t + a 0 y z ( t ) = a 3 z t 3 + a 2 z t 2 + a 1 z t + a 0 z \left\{\begin{array}{ll} x(t)= a_{3x}t^3+a_{2x}t^2+a_{1x}t+a_{0x}\\ y(t)= a_{3y}t^3+a_{2y}t^2+a_{1y}t+a_{0y}\\ z(t)= a_{3z}t^3+a_{2z}t^2+a_{1z}t+a_{0z}\\ \end{array}\right. x(t)=a3xt3+a2xt2+a1xt+a0xy(t)=a3yt3+a2yt2+a1yt+a0yz(t)=a3zt3+a2zt2+a1zt+a0z
写成矢量式: P ( t ) = a 3 t 3 + a 2 t 2 + a 1 t + a 0 P(t)=a_3t^3+a_2t^2+a_1t+a_0 P(t)=a3t3+a2t2+a1t+a0

几何形式:用端点位矢 P ( 0 ) P(0) P(0) P ( 1 ) P(1) P(1) 和端点切矢 P ′ ( 0 ) P'(0) P(0) P ′ ( 1 ) P'(1) P(1) 代替 a i a_i ai 来描述:
{ P ( 0 ) = a 0 P ( 1 ) = a 3 + a 2 + a 1 + a 0 P ′ ( 0 ) = a 1 P ′ ( 1 ) = 3 a 3 + 2 a 2 + a 1 { a 0 = P 0 a 1 = P 0 ′ a 2 = − 3 P 0 + 3 P 1 − 2 P 0 ′ − P 1 ′ a 3 = 2 P 0 − 2 P 1 + P 0 ′ + P 1 ′ \left \{ \begin{array}{ll} P(0)=a_0 \\ P(1)=a_3+a_2+a_1+a_0 \\ P'(0)=a_1 \\ P'(1)=3a_3+2a_2+a_1 \\ \end{array}\right. \quad\quad \left \{ \begin{array}{ll} a_0=P_0 \\ a_1=P'_0 \\ a_2=-3P_0+3P_1-2P'_0-P'_1 \\ a_3=2P_0-2P_1+P'_0+P'_1 \\ \end{array}\right. P(0)=a0P(1)=a3+a2+a1+a0P(0)=a1P(1)=3a3+2a2+a1 a0=P0a1=P0a2=3P0+3P12P0P1a3=2P02P1+P0+P1

带入矢量式中得到:
P ( t ) = ( 2 t 3 − 3 t 2 + 1 ) P 0 + ( − 2 t 3 + 3 t 2 ) P 1 + ( t 3 − 2 t 2 + t ) P 0 ′ + ( t 3 − t 2 ) P 1 ′ t ∈ [ 0 , 1 ] = F 0 ( t ) P 0 + F 1 P 1 + G 0 P 0 ′ + G 1 P 1 ′ \begin{array}{ll} \quad P(t)\\ =(2t^3-3t^2+1)P_0+(-2t^3+3t^2)P_1+(t^3-2t^2+t)P'_0+(t^3-t^2)P'_1 \quad t\in[0,1] \\ = F_0(t)P_0+F_1P_1+G_0P'_0+G_1P'_1 \end{array} P(t)=(2t33t2+1)P0+(2t3+3t2)P1+(t32t2+t)P0+(t3t2)P1t[0,1]=F0(t)P0+F1P1+G0P0+G1P1
其中 F 0 F_0 F0 F 1 F_1 F1 G 0 G_0 G0 G 1 G_1 G1 被称为调和函数(混合函数、Hermite 基函数),图像大致如下:

5_47

调和函数的性质:(记住图像比较好使)
F i ( j ) = G i ′ ( j ) = δ i j = { 1 i = j 0 i ≠ j F i ′ ( j ) = G i ( j ) = 0 , i ,   j = 0 ,   1 F_i(j)=G'_i(j)=\delta_{ij}= \left\{ \begin{array}{ll} 1 & i=j \\ 0 & i\not=j \end{array} \right. \quad\quad\quad F'_i(j)=G_i(j)=0,\quad i,\,j=0,\,1 Fi(j)=Gi(j)=δij={10i=ji=jFi(j)=Gi(j)=0,i,j=0,1

连续性

简答题,要写出不同连续性的级别及其数学表达式

对于两条曲线 P ( t ) P(t) P(t) Q ( t ) Q(t) Q(t) t ∈ [ 0 ,   1 ] t\in[0,\,1] t[0,1] ,在结合处的连续性级别:(逐层递进)

  • G 0 G_0 G0 连续和 C 0 C_0 C0 连续:两曲线在结合处位置连续: P ( 1 ) = Q ( 0 ) P(1)=Q(0) P(1)=Q(0)

  • G 1 G_1 G1 连续: G 0 G_0 G0 连续且有方向相同但大小不同的切矢: a P ′ ( 1 ) = Q ′ ( 0 ) ( a > 0 ) aP'(1)=Q'(0)\quad(a\gt0) aP(1)=Q(0)(a>0)

  • C 1 C_1 C1 连续: G 0 G_0 G0 连续且有方向和大小均相同的切矢: P ′ ( 1 ) = Q ′ ( 0 ) P'(1)=Q'(0) P(1)=Q(0)

  • G 2 G_2 G2 连续: G 1 G_1 G1 连续且有方向相同但大小不同的曲率矢: P ′ ( 1 ) × P ′ ′ ( 1 ) ∣ P ′ ( 1 ) ∣ 3 = Q ′ ( 0 ) × Q ′ ′ ( 0 ) ∣ Q ′ ( 0 ) ∣ 3 \frac{P'(1)\times P''(1)}{|P'(1)|^3}=\frac{Q'(0)\times Q''(0)}{|Q'(0)|^3} P(1)3P(1)×P′′(1)=Q(0)3Q(0)×Q′′(0)

  • C 2 C_2 C2 连续: G 1 G_1 G1 连续且有方向和大小均相同的曲率矢: Q ′ ′ ( 0 ) = α 2 P ′ ′ ( 1 ) + β P ′ ( 1 ) Q''(0)=\alpha^2P''(1)+\beta P'(1) Q′′(0)=α2P′′(1)+βP(1)

    β \beta β 为任意常数;当 α = 1   β = 0 \alpha=1\,\beta=0 α=1β=0 时, G 2 G_2 G2 连续就成为 C 2 C_2 C2 连续)

参数曲面

简答题:问概念(能说出某一种曲面的定义和例子,或者给一些图进行分类)

常见参数曲面表示

① 参数表示矩形域的三维曲面: 用双参数的单值函数表示, x = x ( u ,   w ) x=x(u,\,w) x=x(u,w) y = y ( u ,   w ) y=y(u,\,w) y=y(u,w) z = z ( u ,   w ) z=z(u,\,w) z=z(u,w) u ,   w ∈ [ 0 ,   1 ] u,\,w\in[0,\,1] u,w[0,1] ),记为 p ( u ,   w ) = [ x ( u ,   w ) ,   y ( u ,   w ) ,   z ( u ,   w ) ] p(u,\,w)=[x(u,\,w),\,y(u,\,w),\,z(u,\,w)] p(u,w)=[x(u,w),y(u,w),z(u,w)]

5_21
  • 角点: p ( 0 ,   0 ) p(0,\,0) p(0,0) p ( 0 ,   1 ) p(0,\,1) p(0,1) p ( 1 ,   0 ) p(1,\,0) p(1,0) p ( 1 ,   1 ) p(1,\,1) p(1,1)

  • 边界线: p ( u ,   0 ) p(u,\,0) p(u,0) p ( u ,   1 ) p(u,\,1) p(u,1) p ( 0 ,   w ) p(0,\,w) p(0,w) p ( 1 ,   w ) p(1,\,w) p(1,w) ,简记为 p u 0 ,   p u 1 ,   p 0 w ,   p 1 w p_{u0},\,p_{u1},\,p_{0w},\,p_{1w} pu0,pu1,p0w,p1w

  • 矩形域曲面片上一点: p ( u i ,   w j ) p(u_i,\,w_j) p(ui,wj) ,记为 p i j p_{ij} pij

  • 切矢量: 有两个方向上的切矢量(偏导矢),分别记为
    p i j u = ∂ P ( u ,   w ) ∂ u p i j w = ∂ P ( u ,   w ) ∂ w p^u_{ij}=\frac{\partial P(u,\,w)}{\partial u} \quad\quad p^w_{ij}=\frac{\partial P(u,\,w)}{\partial w} piju=uP(u,w)pijw=wP(u,w)

  • 混合偏导矢 / 扭矢 :反应 p u p^u pu w w w 的变化率或者 p w p^w pw u u u 的变化率,分别记为:

P u w ( u ,   w ) = ∂ 2 P ( u ,   w ) ∂ u ∂ w P w u ( u ,   w ) = ∂ 2 P ( u ,   w ) ∂ w ∂ u P_{uw}(u,\,w)=\frac{\partial^2P(u,\,w)}{\partial u\partial w} \quad\quad P_{wu}(u,\,w)=\frac{\partial^2P(u,\,w)}{\partial w\partial u} Puw(u,w)=uw2P(u,w)Pwu(u,w)=wu2P(u,w)

  • 法矢量: 记为 n i j = p i j u × p i j w ∣ p i j u × p i j w ∣ n_{ij}=\frac{p^u_{ij}\times p^w_{ij}}{|p^u_{ij}\times p^w_{ij}|} nij=piju×pijwpiju×pijw (就是两个切矢量的叉积方向上的单位向量)

x o y xoy xoy 平面上矩形域平面片: x = ( c − a ) u + a x=(c-a)u+a x=(ca)u+a y = ( d − b ) w + b y=(d-b)w+b y=(db)w+b z = 0 z=0 z=0 u ,   w ∈ [ 0 ,   1 ] u,\,w\in[0,\,1] u,w[0,1]

5_22

③ 球面: x = x 0 + r cos ⁡ ( u ) cos ⁡ ( w ) x=x_0+r\cos(u)\cos(w) x=x0+rcos(u)cos(w) y = y 0 + r cos ⁡ ( u ) sin ⁡ ( w ) y=y_0+r\cos(u)\sin(w) y=y0+rcos(u)sin(w) z = z 0 + r sin ⁡ ( u ) z=z_0+r\sin(u) z=z0+rsin(u)

  • 球心: ( x 0 ,   y 0 ,   z 0 ,   ) (x_0,\,y_0,\,z_0,\,) (x0,y0,z0,) ,半径: r r r
  • u ∈ [ − π 2 ,   π 2 ] u\in[-\frac{\pi}{2},\,\frac{\pi}{2}] u[2π,2π] w ∈ [ 0 ,   2 π ] w\in[0,\,2\pi] w[0,2π]
5_23
双三次参数曲面

代数形式: P ( u ,   w ) = ∑ i = 0 3 ∑ j = 0 3 a i j u i w j P(u,\,w)=\sum\limits_{i=0}^3\sum\limits_{j=0}^3a_{ij}u^iw^j P(u,w)=i=03j=03aijuiwj u ,   w ∈ [ 0 ,   1 ] u,\,w\in[0,\,1] u,w[0,1]

矩阵表示: P = U A W T P=UAW^T P=UAWT (每个 a i j a_{ij} aij 代表一个位矢,例如 Bezier 曲线中的特征网格的网格点)
U = [ u 3 u 2 u 1 ] W = [ w 3 w 2 w 1 ] A = [ a 33 a 32 a 31 a 30 a 23 a 22 a 21 a 20 a 13 a 12 a 11 a 10 a 03 a 02 a 01 a 00 ] U=\begin{bmatrix} u^3 & u^2 & u & 1 \end{bmatrix} \quad\quad W=\begin{bmatrix} w^3 & w^2 & w & 1 \end{bmatrix} \quad\quad A= \begin{bmatrix} a_{33} & a_{32} & a_{31} & a_{30} \\ a_{23} & a_{22} & a_{21} & a_{20} \\ a_{13} & a_{12} & a_{11} & a_{10} \\ a_{03} & a_{02} & a_{01} & a_{00} \\ \end{bmatrix} U=[u3u2u1]W=[w3w2w1]A= a33a23a13a03a32a22a12a02a31a21a11a01a30a20a10a00

其他常见参数曲面

简单回转面: 由曲线 [ x ( u ) ,   z ( u ) ] [x(u),\,z(u)] [x(u),z(u)] z z z 轴旋转得到的回转面:
x = x ( u ) cos ⁡ ( w ) y = x ( u ) sin ⁡ ( w ) z = z ( u ) ( w ∈ [ 0 ,   2 π ] ) x=x(u)\cos(w) \quad\quad y=x(u)\sin(w) \quad\quad z=z(u) \quad\quad (w\in[0,\,2\pi]) x=x(u)cos(w)y=x(u)sin(w)z=z(u)(w[0,2π])
5_25

直纹面: 由直线运动产生的曲面;动直线称为直母线(简称母线);包括:

  • 一条直母线:柱面、锥面
  • 两条直母线:单叶双曲面、双曲抛物面(马鞍面)
  • 一条空间曲线的全体切线组成的切线曲面也是直纹面
5_27

5.2 Bezier 曲线与曲面

Bezier和B样条是最重要的两节,据说至少占20分;Bezier 曲线计算量较小,都有可能考

Bezier 曲线的定义

Bezier 曲线:Bezier 曲线由一系列控制点(记为 P i P_i Pi ,构成了折线集 / Bezier 特征多边形)来定义

Bezier 参数曲线上各点坐标的插值公式: p ( t ) = ∑ i = 0 n P i B i ,   n ( t ) p(t)=\sum\limits_{i=0}^nP_iB_{i,\,n}(t) p(t)=i=0nPiBi,n(t) ,其中:

  • P i ( i ∈ [ 0 ,   n ] ) P_i\quad (i\in[0,\,n]) Pi(i[0,n]) 为控制点,构成了 Bezier 曲线的特征多边形
  • B i ,   n = C n i   t i ( 1 − t ) n − i ( t ∈ [ 0 ,   1 ] ) B_{i,\,n}=C_n^i\,t^i(1-t)^{n-i}\quad (t\in[0,\,1]) Bi,n=Cniti(1t)ni(t[0,1]) ,称为 Berstain 基函数

特点:

  • 起点、终点与特征多边形重合

  • 起点与终点的切线方向和特征多边形第一条边及最后一条边的走向一致

  • 曲线形状趋于特征多边形的形状

5_53

Berstain 基函数的性质

基本每年都考,要求会现场推导,端点性质是最主要的性质

正性: B i ,   n ( t ) = { = 0 t = 0 ,   1 > 0 t ∈ ( 0 ,   1 ) ,    i = 1 , 2 , . . . , n − 1 B_{i,\,n}(t)= \left\{ \begin{array}{ll} =0 & t=0,\,1 \\ \gt 0 & t\in(0,\,1),\,\,i=1,2,...,n-1 \end{array} \right. Bi,n(t)={=0>0t=0,1t(0,1),i=1,2,...,n1

端点性质: (所以 Bezier 曲线的起点、终点与特征多边形的起点和终点(即 P 0 P_0 P0 P n P_n Pn )相重合)
B i ,   n ( 0 ) = { 1 i = 0 0 e l s e B i ,   n ( 1 ) = { 1 i = n 0 e l s e B_{i,\,n}(0)= \left\{ \begin{array}{ll} 1 & i=0 \\ 0 & else \end{array} \right. \quad\quad B_{i,\,n}(1)= \left\{ \begin{array}{ll} 1 & i=n \\ 0 & else \end{array} \right. Bi,n(0)={10i=0elseBi,n(1)={10i=nelse
权性: 由二项式定理得, ∑ i = 0 n B i ,   n ( t ) = 1 t ∈ ( 0 ,   1 ) \sum\limits_{i=0}^nB_{i,\,n}(t)=1\quad t\in(0,\,1) i=0nBi,n(t)=1t(0,1)

对称性: B i ,   n ( t ) = B n − i ,   n ( 1 − t ) B_{i,\,n}(t)=B_{n-i,\,n}(1-t) Bi,n(t)=Bni,n(1t)

递推性: B i ,   n ( t ) = ( 1 − t ) B i ,   n − 1 ( t ) + t B i − 1 ,   n − 1 ( t ) B_{i,\,n}(t)=(1-t)B_{i,\,n-1}(t)+tB_{i-1,\,n-1}(t) Bi,n(t)=(1t)Bi,n1(t)+tBi1,n1(t)

导函数: B i ,   n ′ ( t ) = n ( B i − 1 ,   n − 1 ( t ) − B i ,   n − 1 ( t ) ) B'_{i,\,n}(t)=n(B_{i-1,\,n-1}(t)-B_{i,\,n-1}(t)) Bi,n(t)=n(Bi1,n1(t)Bi,n1(t))

最大值: B i ,   n ( t ) B_{i,\,n}(t) Bi,n(t) t = i n t=\frac{i}{n} t=ni 处达到最大值

升阶公式: B i ,   n ( t ) = ( 1 − i n + 1 ) B i ,   n + 1 ( t ) + i + 1 n + 1 B i + 1 ,   n + 1 ( t ) B_{i,\,n}(t)=(1-\frac{i}{n+1})B_{i,\,n+1}(t)+\frac{i+1}{n+1}B_{i+1,\,n+1}(t) Bi,n(t)=(1n+1i)Bi,n+1(t)+n+1i+1Bi+1,n+1(t)

积分: ∫ 0 1 B i ,   n ( t ) d t = 1 n + 1 \int\limits_0^1B_{i,\,n}(t)dt=\frac{1}{n+1} 01Bi,n(t)dt=n+11

Bezier 曲线的性质

重要性质:端点性质和一阶导矢

端点性质: ∑ i = 0 n P i B i ,   n ( 0 ) = P ( 0 ) \sum\limits_{i=0}^nP_iB_{i,\,n}(0)=P(0) i=0nPiBi,n(0)=P(0) ∑ i = 0 n P i B i ,   n ( 1 ) = P ( 1 ) \sum\limits_{i=0}^nP_iB_{i,\,n}(1)=P(1) i=0nPiBi,n(1)=P(1) ,即 Bezier 曲线的起点、终点与特征多边形的起点和终点重合

一阶导矢与切矢量: Bezier 曲线的起点和终点切线方向与特征多边形的第一条边和最后一条鞭走向一致:
F ′ ( t ) = n ∑ i = 0 n P i [ B i − 1 ,   n − 1 ( t ) − B i ,   n − 1 ( t ) ] P ′ ( 0 ) = n ( P 1 − P 0 ) P ′ ( 1 ) = n ( P n − P n − 1 ) F'(t)=n\sum\limits_{i=0}^nP_i[B_{i-1,\,n-1}(t)-B_{i,\,n-1}(t)] \quad P'(0)=n(P_1-P_0) \quad P'(1)=n(P_n-P_{n-1}) F(t)=ni=0nPi[Bi1,n1(t)Bi,n1(t)]P(0)=n(P1P0)P(1)=n(PnPn1)
二阶导矢与曲率:
F ′ ′ ( t ) = n ∑ i = 0 n ( P i + 2 − 2 P i + 1 + P i ) B i ,   n − 2 ( t ) P ′ ′ ( 0 ) = n ( n − 1 ) ( P 2 − 2 P 1 + P 0 ) P ′ ′ ( 1 ) = n ( n − 1 ) ( P n − 2 P n − 1 + P n + 2 ) F''(t)=n\sum\limits_{i=0}^n(P_{i+2}-2P_{i+1}+P_i)B_{i,\,n-2}(t) \\ P''(0)=n(n-1)(P_2-2P_1+P_0) \quad\quad P''(1)=n(n-1)(P_n-2P_{n-1}+P_{n+2}) F′′(t)=ni=0n(Pi+22Pi+1+Pi)Bi,n2(t)P′′(0)=n(n1)(P22P1+P0)P′′(1)=n(n1)(Pn2Pn1+Pn+2)
总结: r r r 阶导矢只与 r + 1 r+1 r+1 个相邻点有关

k 阶导函数的差分表示: Δ k P i = Δ k − 1 P i + 1 − Δ k − 1 P i \Delta^kP_i=\Delta^{k-1}P_{i+1}-\Delta^{k-1}P_i ΔkPi=Δk1Pi+1Δk1Pi

对称性: 令控制点反转顺序,即 P i ∗ = P n − i P_i^*=P_{n-i} Pi=Pni ,则得到的新的 Bezier 曲线与原来形状相同,走向相反

凸包性: Bezier 曲线 P ( t ) P(t) P(t) 是控制点 P i P_i Pi 的凸线性组合,即曲线落在 P i P_i Pi 构成的凸包当中

5_63

坐标不变性: Bezier 曲线的位置与形状与其特征多边形顶点位置有关,而不依赖于坐标系的选择

变差缩减性: 平面上任意一条直线与 Bezier 曲线的交点数不多于其与特征多边形的交点数,说明 Bezier 曲线比比起特征多边形的波动小、更光顺

仿射不变性: 仿射变换下, P ( t ) P(t) P(t) 的形式不变

Bezier 曲线的矩阵表示

给出 Bezier 曲线的代数或矩阵表示,推导出曲线的相关性质

一次Bezier曲线 P ( t ) = ( 1 − t ) P 0 + t P 1 P(t)=(1-t)P_0+tP_1 P(t)=(1t)P0+tP1 ,一次 Bezeir 曲线是连接起点 P 0 P_0 P0 与终点 P 1 P_1 P1 的直线段,其矩阵表示为:
P ( t ) = [ t 1 ] [ − 1 1 1 0 ] [ P 0 P 1 ] t ∈ [ 0 ,   1 ] P(t)= \begin{bmatrix} t & 1 \end{bmatrix} \begin{bmatrix} -1 & 1 \\ 1 & 0 \end{bmatrix} \begin{bmatrix} P_0 \\ P_1 \end{bmatrix} \quad t\in[0,\,1] P(t)=[t1][1110][P0P1]t[0,1]
二次Bezier曲线 P ( t ) = ( 1 − t ) 2 P 0 + 2 t ( 1 − t ) P 1 + t 2 P 2 P(t)=(1-t)^2P_0+2t(1-t)P_1+t^2P_2 P(t)=(1t)2P0+2t(1t)P1+t2P2 ,二次 Bezier 曲线是起点为 P 0 P_0 P0 、终点为 P 2 P_2 P2 的抛物线,其矩阵表示为:
P ( t ) = [ t 2 t 1 ] [ 1 − 2 1 − 2 2 0 1 0 0 ] [ P 0 P 1 P 2 ] P(t)= \begin{bmatrix} t^2 & t & 1 \end{bmatrix} \begin{bmatrix} 1 & -2 & 1 \\ -2 & 2 & 0 \\ 1 & 0 & 0 \\ \end{bmatrix} \begin{bmatrix} P_0 \\ P_1 \\ P_2 \end{bmatrix} P(t)=[t2t1] 121220100 P0P1P2
三次Bezier曲线 P ( t ) = ( 1 − t ) 3 P 0 + 3 t ( 1 − t ) 2 P 1 + 3 t 2 ( 1 − t ) P 2 + t 3 P 3 P(t)=(1-t)^3P_0+3t(1-t)^2P_1+3t^2(1-t)P_2+t^3P_3 P(t)=(1t)3P0+3t(1t)2P1+3t2(1t)P2+t3P3 ,其矩阵表示为:
P ( t ) = [ t 3 t 2 t 1 ] [ − 1 3 − 3 1 3 − 6 3 0 − 3 3 0 0 1 0 0 0 ] [ P 0 P 1 P 2 P 3 ] P(t)= \begin{bmatrix} t^3 & t^2 & t & 1 \end{bmatrix} \begin{bmatrix} -1 & 3 & -3 & 1 \\ 3 & -6 & 3 & 0 \\ -3 & 3 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ \end{bmatrix} \begin{bmatrix} P_0 \\ P_1 \\ P_2 \\ P_3 \end{bmatrix} P(t)=[t3t2t1] 1331363033001000 P0P1P2P3
n 次Bezier曲线 p ( t ) = ∑ i = 0 n P i B i ,   n ( t ) p(t)=\sum\limits_{i=0}^nP_iB_{i,\,n}(t) p(t)=i=0nPiBi,n(t)

Bezier 曲线的递推(de Casteljau)算法

该算法很可能会考,要写出或画出递推关系,以及给出 t 、画出几何作图法的示意图

朴素算法: 给出定义域 t ∈ [ 0 ,   1 ] t\in[0,\,1] t[0,1] 中离散的若干点,对于每个 t i t_i ti ,直接带入方程,求出对应的曲线上的点的坐标(直接带入曲线方程的计算量大,考虑如下的递推算法)di’yi’ji

de Casteljau 算法原理: 以二次 Bezier 曲线为例(即抛物线三切线定理)

  • P 0 P 1 P_0P_1 P0P1 P 1 P 2 P_1P_2 P1P2 各一点 P 0 1 P_0^1 P01 P 1 1 P_1^1 P11 ,使得 P 0 P 0 1 P 0 1 P 1 = P 1 P 1 1 P 1 1 P 2 = t \frac{P_0P_0^1}{P_0^1P_1}=\frac{P_1P_1^1}{P_1^1P_2}=t P01P1P0P01=P11P2P1P11=t

  • 再取 P 0 1 P 1 1 P_0^1P_1^1 P01P11 上一点 P 0 2 P_0^2 P02 ,使得 P 0 1 P 0 2 P 0 2 P 1 1 = t \frac{P_0^1P_0^2}{P_0^2P_1^1}=t P02P11P01P02=t ,则 P 0 2 P_0^2 P02 为抛物线上的点,且 P 0 1 P 1 1 P_0^1P_1^1 P01P11 为抛物线的切点

5_70

注意: 右上角的角标代表递推的层次

(其实直接取抛物线上这样子的三条切线,就可以得到 P 0 P 0 1 P 0 1 P 1 = P 1 P 1 1 P 1 1 P 2 = P 0 1 P 0 2 P 0 2 P 1 1 \frac{P_0P_0^1}{P_0^1P_1}=\frac{P_1P_1^1}{P_1^1P_2}=\frac{P_0^1P_0^2}{P_0^2P_1^1} P01P1P0P01=P11P2P1P11=P02P11P01P02 ;基于抛物线三切线定理,可能根据数学归纳法可以得出 de Casteljau 算法的原理)

递推计算公式:
P i k ( t ) = { P i k = 0 ( 1 − t ) P i k − 1 ( t ) + t P i + 1 k − 1 ( t ) k = 1 , 2 , . . . , n ;    i = 0 , 1 , . . . , n − k P^k_i(t)= \left \{ \begin{array}{ll} P_i & k=0 \\ (1-t)P^{k-1}_i(t)+tP^{k-1}_{i+1}(t) & k=1,2,...,n;\,\,i=0,1,...,n-k \end{array} \right. Pik(t)={Pi(1t)Pik1(t)+tPi+1k1(t)k=0k=1,2,...,n;i=0,1,...,nk
几何作图:

  • 给定参数 t ∈ [ 0 ,   1 ] t\in[0,\,1] t[0,1]
  • 首先依次对原始控制点执行同样的定比分割,得到第一级递推的中间顶点 P 0 i   ( i = 0 , 1 , . . . , n − 1 ) P^i_0\,(i=0,1,...,n-1) P0i(i=0,1,...,n1)
  • 对中间顶点重复如上过程,直到 n n n 级递推得到唯一的中间顶点 P 0 n P_0^n P0n ,即为所求的曲线上的点 P ( t ) P(t) P(t)

例如, n = 3 n=3 n=3 时,有如下的递推过程和几何作图过程:

5_745_76

注意: de Casteljau 算法是可以精确计算出 Bezier 曲线上的点的

Bezier 曲线的拼接

Bezier 曲线次数的提高会导致计算量增大,但是对描述更为复杂的曲线形状增益不大;所以实际使用中一般不超过 10 次,而是分段设计,然后相互连接起来,并在接合处保持一定的连续条件

Bezier 曲线的升阶与降阶

次要,了解概念即可

升阶: 保持 Bezier 曲线的形状与方向不变,增加定义控制定点数,以提高 Bezier 曲线次数

  • 新的控制顶点 P i ∗ P^*_i Pi 是以参数值 i n + 1 \frac{i}{n+1} n+1i 按分段线性插值从原始特征多边形得出的
  • 升阶后的新的特征多边形在原始特征多边形的凸包内
  • 新的特征多边形更靠近曲线
5_84

降阶: 升阶的逆过程

Bezier 曲面

次要,了解概念即可

定义

特征网格: P i j    ( i = 0 , 1 , . . . m ,   j = 0 , 1 , . . . , n ) P_{ij}\,\,(i=0,1,...m,\,j=0,1,...,n) Pij(i=0,1,...m,j=0,1,...,n) ( m + 1 ) × ( n + 1 ) (m+1)\times(n+1) (m+1)×(n+1) 个空间点列,构成特征网格

Bezier 曲面: m × n m\times n m×n 次张量积形式的 Bezier 曲面为: P ( u ,   v ) = ∑ i = 0 m ∑ j = 0 n P [ i j ] B i ,   m ( u ) B j ,   n ( v ) P(u,\,v)=\sum\limits_{i=0}^m\sum\limits_{j=0}^nP_[ij]B_{i,\,m}(u)B_{j,\,n}(v) P(u,v)=i=0mj=0nP[ij]Bi,m(u)Bj,n(v) ,矩阵表示为:
[ B 0 , m ( u ) B 1 , m ( u ) . . . B m , m ( u ) ] [ P 00 P 01 . . . P 0 n P 10 P 11 . . . P 1 n . . . . . . . . . . . . P m 0 P n 1 . . . P m n ] [ B 0 , n ( v ) B 1 , n ( v ) . . . B n , n ( v ) ] \begin{bmatrix} B_{0,m}(u) & B_{1,m}(u) & ... & B_{m,m}(u) \end{bmatrix} \begin{bmatrix} P_{00} & P_{01} & ... & P_{0n} \\ P_{10} & P_{11} & ... & P_{1n} \\ ... & ... & ... & ... \\ P_{m0} & P_{n1} & ... & P_{mn} \\ \end{bmatrix} \begin{bmatrix} B_{0,n}(v) & B_{1,n}(v) & ... & B_{n,n}(v) \end{bmatrix} [B0,m(u)B1,m(u)...Bm,m(u)] P00P10...Pm0P01P11...Pn1............P0nP1n...Pmn [B0,n(v)B1,n(v)...Bn,n(v)]

性质

端点性质 P ( 0 ,   0 ) = P 00 P(0,\,0)=P_{00} P(0,0)=P00 P ( 1 , 0 ) = P m 0 P(1,0)=P_{m0} P(1,0)=Pm0 P ( 0 ,   1 ) = P 0 n P(0,\,1)=P_{0n} P(0,1)=P0n P ( 1 ,   1 ) = P m n P(1,\,1)=P_{mn} P(1,1)=Pmn

端点法向: P 00 P 01 × P 00 P 10 P_{00}P_{01} \times P_{00}P_{10} P00P01×P00P10 P ( u ,   v ) P(u,\,v) P(u,v) P 00 P_{00} P00 的法向

边界线位置、结合不变性、端点切平面性质与 Bezier 曲线类似

5_91
拼接

设两张 m × n m\times n m×n Bezier 曲面片分别由控制顶点 P i j P_{ij} Pij Q i j Q_{ij} Qij 控制

  • G 0 G_0 G0 / C 0 C_0 C0 连续:有公共边界,即 P m j = Q 0 j P_{mj}=Q_{0j} Pmj=Q0j j = 0 , 1 , . . . , n j=0,1,...,n j=0,1,...,n
  • G 1 G_1 G1 连续:在公共边界上有公共切平面: Q u ( 0 ,   v ) × Q v ( 0 ,   v ) = α ( v ) P u ( 1 ,   v ) × P v ( 1 ,   v ) Q_u(0,\,v)\times Q_v(0,\,v)=\alpha(v)P_u(1,\,v)\times P_v(1,\,v) Qu(0,v)×Qv(0,v)=α(v)Pu(1,v)×Pv(1,v)
  • C 1 C_1 C1 连续: G 1 G_1 G1 连续基础上, α ( v ) = 1 \alpha(v)=1 α(v)=1
5_93
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Air浩瀚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值