Skip to Content
Computer Grphics

6.曲线曲面理论基础

2020-02-16Original-language archivelegacy assets may be incomplete

曲面参数化

  • 正常情况下参数域内的点与曲面上的点一一对应
  • 曲面上任一点处总有一个 uu 向切矢 pup_u,和一个 vv 向切矢
  • 正则点:两切矢不平行的点
  • 奇点
    • 曲面上一一对应关系不成立的点
    • 两切矢垂直的点
    • 切矢为 0 向量的点
  • 曲线曲面生成
    • 数学函数:规则曲线曲面
    • 树节点:自由曲线曲面
  • 样条:柔软细长的弹性木条或金属条
  • 样条曲线
    • 数学:多段低次曲线段构成,连接处有连续一次和二次导数
    • 计算机图形学:多项式曲线段连接,边界处满足特点连续条件
  • 参数化样条曲线曲面:用参数表示的样条曲线曲面
  • p()=i=0naiϕi()p()=\sum_{i=0}^na_i\phi_i()
    • 系数矢量:aia_i
    • p()p(): 单/双参数的矢函数
    • ϕi()\phi_i(): 单/双参数的基函数
  • 基表示类型
    • 规范基表示:曲线或曲面上的整体满足柯西条件:i=0nϕi=1\sum_{i=0}^n\phi_i=1
    • 部分规范基表示:曲线或曲面上部分段满足:i=0k<nϕi=1\sum_{i=0}^{k<n}\phi_i=1
    • 非规范基表示
  • 几何不变性:在旋转和平移变换下不变
    • 规范基和部分规范基表示具有几何不变性
    • 非规范基不具有几何不变性
  • 生成方法
    • 插值:曲线通过每个控制点
    • 逼近:不一定通过每个控制点
    • 设计:已知点太少,增加一些点
  • 凸包:包围一组控制点的凸多边形边界
  • 控制多边形:连接有一定次序控制点的直线序列
  • 参数连续性:公共部分匹配参数导数
    • 零阶参数连续性 C0C^0:相连
    • 一阶参数连续性 C1C^1:两段切向量变化率可能会不同(突变,设计应用)
    • 二阶参数连续性 C2C^2:切线平滑变换(电影动画)
    • 高阶参数连续性
  • 几何连续性:两曲线段在相交处参数导数成比例
    • 零阶几何连续性 G0G^0:相连
    • 一阶几何连续性 G1G^1
    • 二阶几何连续性:曲率连续
  • 函数曲线中参数连续性与几何连续性一致
  • 参数曲线中,仅当曲线为正则是一致性成立
  • 光顺性:过同一数据点且具有相同边界几何约束的两条平面插值曲线相对光顺的四项判据或准则
    • 二阶几何连续
    • 不存在奇点与多余的拐点
    • 曲率变化较小
    • 应变能较小

三次插值曲线曲面

  • 三次插值样条性质

    • 存在唯一性
    • 不存在额外的用于群贤形状控制的自由度
    • 收敛性
    • 计算稳定性
    • 整体性
    • 不易控制
  • 自然插值

    • 三次插值样条曲线:n+1n+1nn 个曲线端,需确定 4n4n 个多项式系数
    • 自然三次插值样条:C2C^2
      • 内控制点有四个边界条件
      • 起点终点两个+二阶导为 0/增加两个隐含控制点
    • 控制点中任一改动影响整个曲线
  • Hermite 插值:分段三次多项式,控制点有给定切线

    • 在控制点 PkP_kPk+1P_{k+1} 间的曲线段 p(u)p(u)

      • 边界条件:p(0)=Pk,p(0)=DPk,p(1)=Pk+1,p(1)=DPk+1p(0)=P_k,p'(0)=DP_k,p(1)=P_{k+1},p'(1)=DP_{k+1}

      p(u)=[u3u2u1]T[2211332100101000][PkPk+1DPkDPk+1]p(u)=\begin{bmatrix}u^3\newline u^2\newline u\newline 1\end{bmatrix}^T\begin{bmatrix}2&-2&1&1\newline -3&3&-2&-1\newline 0&0&1&0\newline 1&0&0&0\end{bmatrix}\begin{bmatrix}P_k\newline P_{k+1}\newline DP_k\newline DP_{k+1}\end{bmatrix}

  • Cardinal 样条

    • 边界条件:p(0)=Pk,p(1)=Pk+1,p(0)=(1t)Pk+1Pk12,p(1)=(1t)Pk+2Pk2p(0)=P_k,p(1)=P_{k+1},p'(0)=(1-t)\frac{P_{k+1}-P_{k-1}}{2},p'(1)=(1-t)\frac{P_{k+2}-P_k}{2}
    • 张量参数 ttt<0t<0 较松,t>0t>0 较紧

    p(u)=[u3u2u1]T[t2tt2t2tt332ttt0t00100][Pk1PkPk+1Pk+2]p(u)=\begin{bmatrix}u^3\newline u^2\newline u\newline 1\end{bmatrix}^T\begin{bmatrix}-t&2-t&t-2&t\newline 2t&t-3&3-2t&-t\newline -t&0&t&0\newline 0&1&0&0\end{bmatrix}\begin{bmatrix}P_{k-1}\newline P_{k}\newline P_{k+1}\newline P_{k+2}\end{bmatrix}

  • Kochanek-Bartels 样条

    • 边界条件:p(0)=Pk,p(1)=Pk+1p(0)=P_k,p(1)=P_{k+1}
    • p(0)=12(1t)[(1+b)(1c)(pkpk1)+(1b)(1+c)(pk+1pk)]p'(0)=\frac{1}{2}(1-t)[(1+b)(1-c)(p_k-p_{k-1})+(1-b)(1+c)(p_{k+1}-p_k)]
    • p(1)=12(1t)[(1+b)(1+c)(pk+1pk)+(1b)(1c)(pk+2pk+1)]p'(1)=\frac{1}{2}(1-t)[(1+b)(1+c)(p_{k+1}-p_{k})+(1-b)(1-c)(p_{k+2}-p_{k+1})]
    • 偏离参数 bb:调整在端点处弯曲的数值,可以偏向某一个端点
    • 连续参数 cc:控制切向量在曲线段边界处的连续性;cc非零则曲线在曲线段处斜率不连续

Bezier 曲线曲面

  • 混合函数形式:P(u)=k=0nPkBk,n(u)P(u)=\sum_{k=0}^nP_kB_{k,n}(u)
    • nn 次 Bezier 多项式由 n1n-1 个点控制
    • Bezier 曲线可拟合任何数目的控制点
  • Bernstein 多项式:Bi,n(u)=(ni)ui(1u)niB_{i,n}(u)={n\choose i}u^i(1-u)^{n-i}
    • 非负性,和为 1,对称性,最大值在 in\frac{i}{n}
    • 降阶公式:Bi,n(u)=(1u)Bi,n1(u)+uBi1,n1(u)B_{i,n}(u)=(1-u)B_{i,n-1}(u)+uB_{i-1,n-1}(u)
    • 升阶公式:Bi,n(u)=i+1n+1Bi+1,n+1(u)+n+1in+1Bi1,n1(u)B_{i,n}(u)=\frac{i+1}{n+1}B_{i+1,n+1}(u)+\frac{n+1-i}{n+1}B_{i-1,n-1}(u)
    • [0,1][0,1] 区间积分为 1n+1\frac{1}{n+1}
    • 线性无关性:任意一个 nn 次多项式可表示成其线性组合
  • Bezier 曲线性质
    • 端点位置:p(0)=P0,p(1)=P1p(0)=P_0,p(1)=P_1
    • 端点切矢量:p(0)=n(P1P0),p(1)=n(PnPn1)p'(0)=n(P_1-P_0),p'(1)=n(P_n-P_{n-1})
    • 对称性:次序颠倒曲线形状不变
    • 仿射不变性:A(p(u))=k=0nA(Pk)Bnk,n(u)A(p(u))=\sum_{k=0}^nA(P_k)B_{n-k,n}(u)
    • 凸包性:Bezier 曲线位于控制顶点的凸包内
    • 直线再生性:若控制顶点位于一条直线则 Bezier 曲线为直线
    • 平面曲线的保型性:控制顶点位于平面,则 Bezier 曲线是平面曲线且有保凸性和变差缩减性(平面内任一直线与 Bezier 曲线交点数不多于与控制多边形交点数)
    • 拟局部性:移动一个控制顶点,越远变动越小
    • 封闭 Bezier 曲线有重合第一个和最后一个控制点位置生成
    • 多个控制点位于同一位置:该位置权更大,曲线更接近
  • Bezier 曲线离散点生成:de Casteljau 算法
    • Pi,r=Pir=(1u)Pir1+uPi+1r1P_{i,r}=P_i^r=(1-u)P_i^{r-1}+uP_{i+1}^{r-1}
    • 曲线上的点为 P0nP_0^n
  • Bezier 曲线操作
    • 分割定理:任意 u(0,1),P(u)u'\in(0,1),P(u') 将 Bezier 曲线分为两段,仍可以表示为 Bezier 曲线,器控制顶点由 de Casteljau 算法产生
    • 曲线拼接
      • C0C^0: 端点拼接
      • C1C^1: 新增控制点使三控制点共线
    • 曲线升阶:增加控制点项,Pi=(1λ)Pi+Pi1P_i'=(1-\lambda)P_i+P_{i-1}
  • Bezier 曲面:给定空间 (m+1)×(n+1)(m+1)\times(n+1) 个点的位置 Pj,kP_{j,k}m×nm\times n次 Bezier 曲面为:P(u,v)=j=0mk=0nPj,kBj,m(u)Bk,n(v),u,v[0,1]P(u,v)=\sum_{j=0}^m\sum_{k=0}^nP_{j,k}B_{j,m}(u)B_{k,n}(v),u,v\in[0,1]
    • 角点位置为控制网格的四个角点,边界线是 Bezier 曲线
    • 凸包性,平面再生性,仿射不变性,拟局部性
    • 角点切平面切矢量为 m(P1,0P(0,0)),n(P0,1P0,0)m(P_{1,0}-P(0,0)),n(P_{0,1}-P_{0,0})
    • de Casteljau 算法
  • Bezier 曲线曲面不足
    • 缺少局部性
    • 控制多边形与曲线逼近程度较差
    • 表示复杂形状复杂

B 样条曲线曲面

  • B 样条基函数
    • Un,k+1={uii=0,1,,n+k+1}U_{n,k+1}=\{u_i|i=0,1,\cdots,n+k+1\}
    • Un,k+1U_{n,k+1} 上的 kk 次 B 样条基函数:Bi,k+1(u)=uuiui+kuiBi,k(u)+ui+k+1uui+k+1ui+1Bi+1,k(u)B_{i,k+1}(u)=\frac{u-u_i}{u_{i+k}-u_i}B_{i,k}(u)+\frac{u_{i+k+1}-u}{u_{i+k+1}-u_{i+1}}B_{i+1,k}(u)
      • deBoox-Cox 递推公式
      • 递推式中若有 0/0 则取值为 0
      • ,Bi,1(u)=[[u[ui,ui+1)]],B_{i,1}(u)=[[u\in[u_i,u_{i+1})]]
    • 局部性:Bi,k+1B_{i,k+1} 只在 (ui,ui+k+1)(u_i,u_{i+k+1}) 取正值,其它地方为零;对于区间 (ui,ui+k)(u_i,u_{i+k}) 至多只有 kk 个基函数在其上非零
    • i,k+1(u)=1\sum_{i,k+1}(u)=1
    • 连续性:Bi,k+1(u)B_{i,k+1}(u)rr 重节点处至少为 krk-r 次连续
    • 线段无关性
    • 分段多项式:Bi,k+1(u)B_{i,k+1}(u) 在每个长度非零的区间 [uj,uj+1)[u_j,u_{j+1}) 上都是次数不高于 kk 的多项式
  • B 样条曲线定义
    • 给定 n+1n+1 个控制顶点 PiP_i
    • 给定 n+k+2n+k+2 个参数节点向量 Un,k={uii=0,,n+k+1,uiui+1}U_{n,k}=\{u_i|i=0,\cdots,n+k+1,u_i\leq u_{i+1}\}
    • k+1k+1 阶(kk 次) B 样条曲线:p(u)=i=0nPiBi,k+1(u),u[uk,un+1]p(u)=\sum_{i=0}^nP_iB_{i,k+1}(u),u\in[u_k,u_{n+1}]
    • Bi,k+1(u)B_{i,k+1}(u) 的支撑区间 [ui,ui+k+1][u_i,u_{i+k+1}]
      • iikk 次样条需 k+2k+2 个参数节点
      • 移动顶点 PiP_i 至多影响 B 样条基函数支撑区间内定义的曲线段
    • n+1n+1 个顶点定义的 kk 次 B 样条有 nk+1n-k+1
      • 一段由 k+1k+1 个控制节点定义
    • 节点向量确定方式
      • 首先确定 nk+2n-k+2 个节点,收尾各延伸 kk 个节点
  • B 样条曲线性质
    • 局部性
    • 凸包性
    • 直线再生性
    • 分段参数多项式曲线
    • 磨光性质:同组控制顶点定义的 B 样条,随次数增加而更加光滑
    • 仿射不变性
    • 平面曲线的保型性
    • 连续性:P(u)P(u)rr 重节点 uiu_i 处至少 Ck1rC^{k-1-r}
  • deBoor-Cox 算法:从给定参数区间 [uk,un+1][u_k,u_{n+1}] 中划分出一个参数 u[uj,uj+1]u\in[u_j,u_{j+1}] 计算 B 样条曲线型值点 p(u)p(u) 的过程
  • 0 次 B 样条:控制顶点序列
  • 1 次 B 样条:控制多边形
  • B 样条曲线类型
    • 均匀 B 样条:节点向量定义均匀 B 样条,Δi=ui+1ui=C\Delta_i=u_{i+1}-u_i= C
    • 准均匀 B 样条:两端节点具有重复度 k+1k+1,所有内节点均匀分布,重复度 1
    • 分段 Bezier 曲线:两顿节点重复度为 k+1k+1,所有内节点重复度为 kk
    • 非均匀 B 样条
  • B 样条曲线的重节点
    • 重节点重复度加一,曲线段减一,该处可微性降一
    • 内点最大重复度等于曲线次数,取 kk 时曲线插值于相应的控制顶点
    • 端点最大重复度 k+1k+1
    • 端节点重复度为 kk:曲线相重且相切与控制多边形
    • 端节点重复度为 k+1k+1:与 Bezier 曲线相同的端点集合性质
    • 定义域内相邻两点都具有重复度 kk:生成 定义在该节点区间上那段 B 样条曲线的 Bezier 曲线
    • 端节点重复度为 k+1k+1,定义域内仅有一个非零节点区间:kk次 B 样条就是kk次 Bezier 曲线
  • B 样条曲面定义:P(u,v)=i=0mj=0nPi,jBi,k(u)Bj,l(v);u[uk,um+1],v[vl,vn+1]P(u,v)=\sum_{i=0}^m\sum_{j=0}^nP_{i,j}B_{i,k}(u)B_{j,l}(v); u\in[u_k,u_{m+1}],v\in[v_l,v_{n+1}]

NURBS 曲线曲面

  • Non-Uniform Rational B-Splines (非均匀有理 B 样条曲线)
  • 非有理样条只能逼近二次曲线
  • 分式表示:p(u)=i=0nωiPiBi,k(u)i=0nωiBi,k(u)p(u)=\frac{\sum_{i=0}^n\omega_iP_iB_{i,k}(u)}{\sum_{i=0}^n\omega_iB_{i,k}(u)}
  • 有理基函数表示:p(u)=i=0nPiRi,k(u),Ri,k(u)=ωiBi,k(u)i=0nωiBi,k(u)p(u)=\sum_{i=0}^nP_iR_{i,k}(u),R_{i,k}(u)=\frac{\omega_iB_{i,k}(u)}{\sum_{i=0}^n\omega_iB_{i,k}(u)}
  • 齐次坐标表示形式:高一维空间里所定义的非有理 B 样条曲线在 ω=1\omega=1 超平面上的投影
  • 交比:Cr(a,b,c,d)=abbd/accd\text{Cr}(a,b,c,d)=\frac{\overline{ab}}{\overline{bd}}/\frac{\overline{ac}}{\overline{cd}}