基于B样条插值法的曲线光滑处理技术及应用

减小字体 增大字体 作者:庄 重 肖 铮  来源:www.zhonghualunwen.com  发布时间:2009-08-16 14:44:16

关键词:曲线光滑;B样条;控制多边形;顶点;B样条插值

摘要:曲线的光滑处理技术在许多领域得到了广泛的应用,其常用方法是将平面上欲连接的点作为控制多边形的顶点,通过相应的数学变换,得到曲线上的点。而为了更准确地表现曲线,通常希望光滑后的曲线能经过这些点。文章介绍了通过B样条插值法使曲线经过平面已知点的方法及其在计算机上的实现,通过实验得到了较好的效果。

1 引言
  
  传统的曲线光滑处理技术是将平面上的点作为控制多边形的顶点,通过相应的数学变换,得到曲线上的点,然后将这些点连接起来即得到光滑曲线。然而,为了更准确地表现曲线,我们希望光滑后的曲线能经过平面上的已知点。我们把曲线上的点称为型值点,构成该曲线的控制多边形的顶点称为顶点。于是问题就变成根据给定型值点计算多边形的顶点问题[1]。因此,需要发展一种方法以便根据给定的点列Pi(i=1,2,…,n)计算控制顶点Vj(j=1,2,…,n+1,n+2),使其定义的曲线通过点列Pi(i=1,2,…,n)并以Pi为曲线段的结点。
  
  2 三次B样条插值
  
  三次均匀B样条曲线的矩阵表示为:
  
  计算多边形顶点Vj(j=1,2,…,n+1,n+2),尚需补充两个适当的边界条件,才能使方程组有惟一解。有多种边界条件可供选择,最为广泛应用的算法是:节点矢量两端点为四重节点且给定曲线两端点条件时的计算方法。利用重节点端点条件的基函数构造准均匀B样条曲线有其独特的优点,即曲线过首、末两个端点。对于反算情况,该法亦具有明显的优越性[2]。应用重节点后,基函数不再是一个统一的标准型式,相应地,各方程组亦有所不同。为清晰地说明算法的基本原理,我们假设曲线段数≥5。经过一系列的推导过程,我们可以得到如公式(3):
  
  其首端点V1=P1,末端顶点Vn+2=Pn。
  
  3 计算机实现
  
  方程组(3)实际上是一个三对角方程组,我们用追赶法可用计算机程序解该方程组。下面是该程序,通过该程序可得到控制多边形的顶点。然后,可根据这些顶点,构造光滑曲线,则这些曲线就会经过平面上的已知点列。
  void CtttView::CaculateCtlPoint(std::vectorOrigPoint,std::vector&CtlPoint)
  {vector::size_type n;
   n=OrigPoint.size();
   double l[50][50],u[50][50];
   double x[50],y[50],x1[50];
   double c[50],d[50],b[50],b1[50],a[50];
   c[0]=-3;
   c[n-2]=0.25;
  c[n-1]=0;
   d[0]=d[n-1]=9;
   d[1]=d[n-2]=0.5833333;
   a[0]=0;
   a[1]=0.25;
   a[n-1]=-3;
  ……
  y[0]=b1[0]/d[0];
   for(int i=1;i   y[i]=(b1[i]-a[i]*y[i-1])/l[i][i];
   x1[n-1]=y[n-1];
   for(int i=n-2;i>=0;i--)
   x1[i]=y[i]-u[i][i+1]*x1[i+1];
   CtlPoint.push_back(OrigPoint[0]);
   for(int i=0;i   CtlPoint.push_back(CPoint(x[i],x1[i]));
   CtlPoint.push_back(OrigPoint[n-1]);
  }
  得到的光滑曲线如图1所示,从图中可以看到,曲线经过了平面上的已知点。
  
  4 结束语
  
  曲线的光滑处理是计算机图形图像处理领域非常重要的内容。为了使曲线能准确地遵循平面已知点,通过三次均匀B样条插值法,得到了控制多边形的顶点,而后再构造光滑曲线,通过实验得到了较为理想的效果。
  
  参考文献:
  [1] 施法中.计算机辅助几何设计与非均匀有理B样条[M].北京:高等教育出版社,2001.
  [2] Bowyer A. Computing Dirichlet Tesselations[J].Computer Journal,1981(24):162-166.
 

Tags:

作者:庄 重 肖 铮
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论