文章目录

  • 1. 参数选择
    • 1.1 The Uniformly Spaced Method
    • 1.2 The Chord Length Method
    • 1.3 The Centripetal Method
  • 2. 节点向量生成
    • 2.1 Knot Vector Generation
    • 2.2 The Universal Method
  • 3. 曲面的参数与节点向量
  • 4. 线性方程组的求解
  • 5. 曲线插值
  • 6. 曲线逼近
  • 7. 曲面插值
  • 8. 曲面逼近

1. 参数选择

参数选择的目的是:对于给定数据点D0,D1,...,DnD_0,D_1,...,D_nD0​,D1​,...,Dn​,在曲线的定义域内找到满足条件Dk=C(tk),0<=k<=nD_k=C(t_k),0<=k<=nDk​=C(tk​),0<=k<=n的n+1n+1n+1个参数点。
参数的选择会影响曲线的形状,进而影响曲线的参数化。

1.1 The Uniformly Spaced Method

区间为[0,1]时:

区间为[a,b]时:

当数据点不是均匀分布时,使用等间距参数可能会产生不规则的形状,例如大凸起、尖峰和环路。

1.2 The Chord Length Method

如果一条插值曲线非常接近数据多边形,则相邻两个数据点之间的曲线段长度将非常接近这两个数据点的弦长,并且插值曲线的长度也将非常接近数据多边形的总长度.
计算公式:
区间为[0,1]时:


区间为[a,b]时:

弦长方法通常来说表现不错,但有时候,当弦长较长时,会导致曲线的凸出量较大,如下图所示:

1.3 The Centripetal Method

向心法是弦长法的扩展,相邻点的距离通过∣Dk−Dk−1∣a|D_k-D_{k-1}|^a∣Dk​−Dk−1​∣a衡量,其中a>0a>0a>0.
计算公式如下:



讨论:
当a=1a=1a=1时,向心法退化为弦长法;

当a<1a<1a<1时,∣Dk−Dk−1∣a<∣Dk−Dk−1∣|D_k-D_{k-1}|^a<|D_k-D_{k-1}|∣Dk​−Dk−1​∣a<∣Dk​−Dk−1​∣,较长弦(即长度>1)对数据多边形长度的影响减小,而较短弦(即长度<1)对数据多边形长度的影响增加。由于这个特点,向心法比弦长法更能处理尖峰。
效果图如下:

但向心法也不一定效果比其他两种方法好,如下图所示,当数据点分布较为对称时,向心法的效果不如等距法好:

2. 节点向量生成

2.1 Knot Vector Generation

得到一组参数后,就可以生成一个节点向量.
假设得到的n+1n+1n+1个参数分别为:t0,t1,...,tnt_0,t_1,...,t_nt0​,t1​,...,tn​,对于ppp次B样条曲线,需要m+1m+1m+1个节点,其中m=n+p+1m=n+p+1m=n+p+1. 如果曲线为Clamped,则u0=u1=...=up=0,um−p=um−p+1=...=um=1u_0=u_1=...=u_p=0,u_{m-p}=u_{m-p+1}=...=u_m=1u0​=u1​=...=up​=0,um−p​=um−p+1​=...=um​=1,剩余的n−pn-pn−p个节点可采用均匀分布或者其他方法。

均匀分布:

等间距的节点向量并不需要知道参数ttt,而且生成起来非常简单。但是,不建议使用这种方法,因为如果将其与弦长法一起用于全局插值,则线性方程组将是奇异的。

de Boor提出的参数平均法:

2.2 The Universal Method

在前面讨论的方法中,都是先确定参数,然后生成节点向量。
Choong-Gyoo Lim提出了一种用等间距节点来计算参数的通用方法。
计算方法如下:
首先定义均匀分布的节点向量:
由节点向量可以得到n+1个B样条基函数;
接下来选择使每个基函数达到最大值时,所对应的点作为参数。
如下图所示,黄色点即为选择的参数点:

3. 曲面的参数与节点向量

由e+1e+1e+1行,f+1f+1f+1列控制点定义的,次数为(p,q)的B样条曲面如下:

假设存在m+1m+1m+1行,n+1n+1n+1列数据点,DijD_{ij}Dij​,其中,0<=i<=m0<=i<=m0<=i<=m,0<=j<=n0<=j<=n0<=j<=n,从而uuu方向上需要m+1m+1m+1个参数,s0,...,sms_0,...,s_ms0​,...,sm​,vvv方向上需要n+1n+1n+1个参数,t0,...,tnt_0,...,t_nt0​,...,tn​,使得曲面上的点S(sc,td)S(s_c,t_d)S(sc​,td​)与数据点DcdD_{cd}Dcd​相对应。

参数计算方法:

  1. 分别对每一列数据点,如第jjj列,D0,j,D1,j,...,Dm,jD_{0,j},D_{1,j},...,D_{m,j}D0,j​,D1,j​,...,Dm,j​计算m+1m+1m+1个参数,得到参数u0,j,u1,j,...,um,ju_{0,j},u_{1,j},...,u_{m,j}u0,j​,u1,j​,...,um,j​,如下图所示,

    得到uuu方向的参数矩阵后,对每一行求平均,得到s0,s1,...,sms_0,s_1,...,s_ms0​,s1​,...,sm​.
  2. 同理,分别对每一行数据点,如第iii行,Di,0,Di,1,...,Di,nD_{i,0},D_{i,1},...,D_{i,n}Di,0​,Di,1​,...,Di,n​,计算n+1n+1n+1个参数,得到参数vi,0,ui,1,...,ui,nv_{i,0},u_{i,1},...,u_{i,n}vi,0​,ui,1​,...,ui,n​;
    得到vvv方向的参数矩阵后,对每一列求平均,得到t0,t1,...,tnt_0,t_1,...,t_nt0​,t1​,...,tn​.

算法如下:

接下来,
由参数值s0,s1,...,sms_0,s_1,...,s_ms0​,s1​,...,sm​和次数ppp,可以得到uuu方向上的节点向量UUU;
由参数值t0,t1,...,tnt_0,t_1,...,t_nt0​,t1​,...,tn​和次数qqq,可以得到vvv方向上的节点向量VVV.

4. 线性方程组的求解

假设 nnn×nnn的系数矩阵AAA,nnn×hhh的常数项矩阵BBB,待求解的nnn×hhh矩阵XXX定义如下:

并且满足如下关系:

LU分解:
将矩阵AAA分解为:A=L.UA=L.UA=L.U,其中LLL为下三角矩阵,UUU为上三角矩阵.
如图所示:

代入原方程,可得:
B=(L.U).XB=(L.U).XB=(L.U).X

B=L.(U.X)B=L.(U.X)B=L.(U.X)

令Y=U.XY=U.XY=U.X,得,
B=L.YB=L.YB=L.Y

因而,方程B=A.XB=A.XB=A.X的求解可分为两步:

  1. 由方程B=L.YB=L.YB=L.Y求解YYY.
  2. 由方程Y=U.XY=U.XY=U.X求解XXX.

正向代换:
B=L.YB=L.YB=L.Y
计算过程:




算法如下:

反向代换:
Y=U.XY=U.XY=U.X
计算过程:





算法如下:

5. 曲线插值

问题描述:给定一组n+1n+1n+1个数据点D0,D2,...,DnD_0,D_2,...,D_nD0​,D2​,...,Dn​和次数ppp,求一条由n+1n+1n+1个控制点定义的ppp次B样条曲线,该曲线按给定顺序通过所给的数据点。

求解:
假设数据点和控制点均为sss维空间中的点,则有,





求解得到矩阵PPP后便可得到控制点,从而得到所求的B样条插值曲线。

算法:
一列一列求解PPP


插值效果图:

注意:
如果节点是通过将连续ppp个参数求平均的方式获得的,则矩阵NNN是正定的,并且有:当∣i−k∣>=p|i-k|>=p∣i−k∣>=p时,Ni,p(tk)=0N_{i,p}(t_k)=0Ni,p​(tk​)=0(de Boor,1978证明).这表明上述算法得到的线性方程组可以用高斯消元法求解。

参数和节点对所构建曲线的影响:
如果弦长分布大致相同,那么所有四种参数选择方法的性能应该是相似的。此外,由于具有均匀节点的B样条基函数的最大值分布非常均匀,因此通用方法的性能应该与均匀方法相似。同样,向心法的工作原理应该类似于弦长法,因为前者是后者的延伸。然而,当弦长分布发生剧烈变化时,情况并非总是如此。
如下图所示:

参数和节点的关系:

与弦长法和向心法相比,通用法得到的参数和节点分布更均匀。此外,从向心法得到的参数和结使较短(resp,longer)的弦拉伸得更长(resp,short),因此分布更均匀。因此,用向心法得到的弦长曲线,在曲线上不会产生较大的晃动。

次数的影响:

等间距法和通用法通常能很好地跟踪较长的弦,但对于较短的弦则存在问题。因为参数的间距相等或几乎相等,所以对于较短的弦,插值曲线必须拉伸得稍微长一点。结果,我们看到了峰和环。高次曲线会使这种情况变得更糟,因为高阶曲线提供了更多的自由度。

至于弦长法,上面的图表明,对于较长的弦,尤其是后面或前面有许多短弦的弦,可能会出现大的凸起,因此,弦长法并不适用。阶数对上述插值曲线的形状没有显著影响。

由于向心法是弦长法的扩展,它们具有相同的特点。然而,由于向心法具有使两个相邻参数之间的距离趋于均匀的趋势,它也具有均与法和通用法的特点。例如,生成的插值曲线紧跟长弦,当阶数增加时,短弦可能会出现循环。事实上,上述结果表明向心法和通用法的计算结果是相似的。

插值的全局性:
改变单个数据点的位置会完全改变插值曲线的形状

6. 曲线逼近

问题描述:
给定一组n+1n+1n+1个数据点D0,D2,...,DnD_0,D_2,...,D_nD0​,D2​,...,Dn​和次数ppp,控制点个数参数hhh,求一条由h+1h+1h+1个控制点定义的ppp次B样条曲线,该曲线满足以下两个条件:

  1. 曲线经过第一个和最后一个数据点D0,DnD_0,D_nD0​,Dn​.
  2. 该曲线在最小二乘意义下逼近数据多边形.

求解:
1.曲线模型:


2.最小二乘意义下的目标函数推导:






3.对单个控制点PgP_gPg​求导:






令导数为0可得,

4.矩阵形式:

又由,


可得:

求解方程得到PPP,即可得到控制点,从而得到所求曲线。

算法:

次数和控制点个数对所构建曲线的影响:

低次曲线通常不能很好地逼近数据多边形,次数越高的曲线产生的结果越好;同样,控制点越多,逼近曲线的灵活性就越高。
但并不是曲线次数越高,控制点个数越多就好,因为全局逼近一般比全局插值使用更少的控制点。如果控制点的个数等于数据点的个数,全局逼近就变成了全局插值,就可以用全局插值了!至于次数,只要生成的曲线能捕捉到数据多边形的形状即可。
逼近的全局性:
更改数据点的位置会导致整个曲线发生变化。

7. 曲面插值

问题描述:
给定一个由(m+1)×(n+1)(m+1)×(n+1)(m+1)×(n+1)个数据点Dij(0<=i<=m,0<=j<=n)D_{ij}(0<=i<=m,0<=j<=n)Dij​(0<=i<=m,0<=j<=n)组成的网格,次数(p,q)(p,q)(p,q),求一个由(m+1)×(n+1)(m+1)×(n+1)(m+1)×(n+1)控制点定义的,按给定顺序经过所有数据点的B样条曲面。

推导过程:




控制点的求解分以下两步:

  1. 对于矩阵DDD的每一列数据点,如第ddd列,由次数ppp,参数s0,s1,...sms_0,s_1,...s_ms0​,s1​,...sm​,数据点D0,d,D1,d,...,Dm,dD_{0,d},D_{1,d},...,D_{m,d}D0,d​,D1,d​,...,Dm,d​,求得第ddd列的控制点Q0,d,Q1,d,...,Qm,dQ_{0,d},Q_{1,d},...,Q_{m,d}Q0,d​,Q1,d​,...,Qm,d​,得到m+1m+1m+1行,n+1n+1n+1列的矩阵QQQ;
  2. 对于矩阵QQQ的每一行数据点,如第iii行,由次数qqq,参数t0,t1,...tnt_0,t_1,...t_nt0​,t1​,...tn​,数据点Qi,0,Qi,1,...,Qi,nQ_{i,0},Q_{i,1},...,Q_{i,n}Qi,0​,Qi,1​,...,Qi,n​,求得第iii行的控制点Pi,0,Pi,1,...,Pi,nP_{i,0},P_{i,1},...,P_{i,n}Pi,0​,Pi,1​,...,Pi,n​.

算法如下:

由m+1m+1m+1行,n+1n+1n+1列的控制点矩阵PijP_{ij}Pij​,次数(p,q)(p,q)(p,q),节点向量U,VU,VU,V,可以得到所求的B样条曲面。
插值效果图:

插值的全局性:
由于插值曲面是通过m+n+2条全局曲线插值得到的,因此这种曲面插值是全局的。

8. 曲面逼近

问题描述:
给定一组(m+1)×(n+1)(m+1)×(n+1)(m+1)×(n+1)个数据点Dij(0<=i<=m,0<=j<=n)D_{ij}(0<=i<=m,0<=j<=n)Dij​(0<=i<=m,0<=j<=n),次数(p,q)(p,q)(p,q),且满足m>e>=p>=1m>e>=p>=1m>e>=p>=1和n>f>=q>=1n>f>=q>=1n>f>=q>=1的eee和fff,找到由(e+1)×(f+1)(e+1)×(f+1)(e+1)×(f+1)控制点PijP_{ij}Pij​(0<=i<=e,0<=j<=f)(0<=i<=e,0<=j<=f)(0<=i<=e,0<=j<=f)定义的,次数为(p,q)(p,q)(p,q)的B样条曲面,该曲面按给定的顺序逼近于数据点网格。

求解:
uuu方向的m+1m+1m+1个参数分别为s0,s1,...,sms_0,s_1,...,s_ms0​,s1​,...,sm​,vvv方向上的n+1n+1n+1个参数分别为t0,t1,...,tnt_0,t_1,...,t_nt0​,t1​,...,tn​.


误差函数:

对每个控制点求偏微分:

从而可以得到(e+1)×(f+1)(e+1)×(f+1)(e+1)×(f+1)个非线性方程,求解非线性方程组非常耗时。

我们可以找到一个不使函数fff最小化的合理的解,而不是寻求最优解。

方法:
采用和曲面插值类似的方法,控制点的求解分为以下两步:

  1. 对DDD中的每一列m+1m+1m+1数据点,进行曲线逼近,分别得到e+1e+1e+1个中间数据点,由于共有n+1n+1n+1列,从而可以得到(e+1)×(n+1)(e+1)×(n+1)(e+1)×(n+1)的中间数据点网格QQQ;
  2. 对QQQ中的每一行n+1n+1n+1数据点,进行曲线逼近,分别得到f+1f+1f+1个控制点,共有e+1e+1e+1行,从而可以得到(e+1)×(f+1)(e+1)×(f+1)(e+1)×(f+1)的控制点矩阵PPP.

算法如下:

由计算得到的(e+1)×(f+1)(e+1)×(f+1)(e+1)×(f+1)控制点矩阵PijP_{ij}Pij​,次数(p,q)(p,q)(p,q),节点向量UUU,VVV,可以得到给定数据点的近似B样条曲面.
效果图如下:

尽管该算法不是最小化函数fff,不是一个最优算法,它仍适合于许多应用。

Interpolation and Approximation相关推荐

  1. pythonocc进阶学习:曲线拟合(插值 Interpolation/逼近 Approximation)

    2d 使用插值法: from OCC.Core.Geom2dAPI import Geom2dAPI_Interpolate from OCC.Core.TColgp import TColgp_HA ...

  2. 2018-3-31 文章(ELM-Chinese-Brief)原文

    什么是超限学习机 1 Guang‐Bin Huang School of Electrical and Electronic Engineering, Nanyang Technological Un ...

  3. (转载)计算机视觉当中的专业英语

    转载自: 1.https://blog.csdn.net/vsooda/article/details/7365776 2.https://wenku.baidu.com/view/7cd9528aa ...

  4. Open CASCADE Technology(OCCT)概述

    OCCT模块结构图 基础类: Foundation Classes module underlies all other OCCT classes; 模型数据: Modeling Data modul ...

  5. 数学专业英语 -- 组合分析和数值分析

    combinatorial analysis 组合分析 digress v. 偏离主题 more often than not 往往 one at a time 逐一地,每次一个地 subset of ...

  6. 计算机视觉术语,计算机视觉常用术语中英文对照.doc

    计算机视觉常用术语中英文对照(1) 2011-06-08 21:26 人工智能??Artificial Intelligence 认知科学与神经科学Cognitive Science and Neur ...

  7. 计算机视觉 专业术语,计算机视觉中常用的术语.doc

    计算机视觉中常用的术语 计算机视觉常用术语中英文对照(1) 2011-06-08 21:26 ??Artificial Intelligence 认知科学和神经科学Cognitive Science ...

  8. 计算机视觉 专业术语,计算机视觉常用术语中英文对照.doc

    计算机视觉常用术语中英文对照.doc 计算机视觉常用术语中英文对照(1) 人工智能Artificial Intelligence认知科学与神经科学Cognitive Science and Neuro ...

  9. 拉格朗日插值函数计算机实现流程图,(拉格朗日插值法课程设计.doc

    (拉格朗日插值法课程设计 摘要 插值法是函数逼近的一种重要方法,是数值计算的基本课题.数学上来说,拉格朗日插值法可以给出一个恰好穿过二维平面上若干个已知点的多项式函数.Lagrange插值是n次多项式 ...

最新文章

  1. MMD_2c_FrequentItemsets
  2. vfp语言第 代计算机语言,VFP语言属于第()代计算机语言。A、一B、二C、三D、四...
  3. bond-vlan-bridge
  4. 【Netty】NIO 选择器 ( Selector ) 通道 ( Channel ) 缓冲区 ( Buffer ) 网络通信案例
  5. 音视频技术开发周刊 92期
  6. 创造思维方法训练_数学思维方法训练课程:每日一题11.24
  7. 提高CSS文件可维护性的五种方法
  8. js 数组遍历for..in弊端
  9. mysql 关系_MySQL之关系
  10. Android 与 JavaScript 相互调用桥梁 JSBridge
  11. mysql 吞吐量测试工具_MySQL基准测试工具--sysbench
  12. Oracle闩:Cache Buffers chains
  13. GPU数据库PG-strom安装及使用
  14. 鸡啄米:C++编程入门系列之目录和总结http://www.jizhuomi.com/software/129.html
  15. 计算机与书法专业,临帖要像?计算机“算法”精确你的每一个像素!震惊书法圈!...
  16. Android:alpha换算表
  17. 吴恩达机器学习神经网络 8-1非线性假设
  18. Win10 LTSB/LTSC 录音机、图片查看器、便签
  19. 全国计算机二级编程题100道,计算机二级C语言100道编程题
  20. c 语言生成一个随机4位数,PLC如何产生一个随机数(含代码)

热门文章

  1. 如何用DataStage构建企业异构数据库之间的高速通道
  2. 51单片机的输入输出简介
  3. K8s集群RBAC认证授权详解
  4. 【Pr】如何在预览的时候预渲染视频
  5. 解决Chrome浏览器检测不到HTCVIVE设备导致Three.js案例显示VR NOT SUPPORTED的问题
  6. web开发报错:The origin server did not find a current representation for the target…
  7. Vue中的v-print打印不完全问题
  8. 弹性反向传播(RProp)和均方根反向传播(RMSProp)
  9. 2>1到底是什么意思?
  10. DM 一次SQL优化经历