B-Spline Global Interpolation

B-Spline Global Interpolation

 

 

 

 

 

现在来考虑一个问题。在空间中有n个点,如何求过这n个点的曲线呢?比如,我们要求过已知点Q的三次B-Spline曲线,并且q分别作为曲线的起点和终点。这样的问题我们称为B-Spline Global Interpolation。先来分析一下,我们已经知道,根据B-Spline曲线的定义,一个参数u就对应一个曲线上的点。或者说,一个时刻t就对应一个曲线上的点。这些点,在这里就是我们已知的这几个点。

 

bspline

 

于是,上面公式中,q是我们已知的空间上的点,P是该曲线的控制点,是未知的。 u是曲线经过q时的参数,也是未知的。我们知道,要得到一条B-Spline曲线,控制点和knot是不可少的。如果我们能计算出曲线经过q时的u,并且给出曲线的knots,那么我们根据上面的公式就可以得到一个线性方程组,解这个线性方程组就可以得到曲线的控制点P。然后再根据这些控制点P和我们给的knots,就可以得到我们要的曲线了。

 

先来看看曲线过点q时参数u的求法, 一般来说有三种方法。

 

平均法(equally spaced)

 equallyspaced

 

 

 

这种求knot的方法简单,但是不推荐。

 

弦长法(chord length)

d为总的弦长

chord

 

那么

 

chord

 

这里推荐这种方法,弦长法也是最广泛使用的方法之一。使用这种方法求出的曲线是最理想的。

 

向心法

centripetal

 

那么

 

 

centriptal

 

求出了参数u,现在来看看knots的求法,这里有两种方法。第一种方法,让每个knot的间隔都相等。那么有

 

 

knots 

 

这种方法仍然是不推荐的,这里推荐下面的方法,求出平均的knot

 

 

knots

 

上式中,p为曲线的次数,n为最后一个控制点的索引,m=n+p+1

 

到这里,需要我们计算的东西都解决了,下面就是建立线性方程组并且求解的问题了。下面举个例子来说明。

 

例:

已知空间中的点q ,求:过这些点的三次B-Spline曲线。

 

根据前面内容讲的,先使用弦长法求曲线过这些点的参数u,然后使用平均法求出曲线的knots,再建立线性方程组求解即可。

 

那么根据题设,有

 

d

 

所以总弦长d=17,根据前面介绍的公式有

 

 

u

 

也就是说,曲线在过空间上的点的时候,参数u分别为05/179/1714/171

 

现在来求knots,同样根据公式有

 

knots 

 

 

那么该曲线的knots

 

knots

 

下面就是建立方程组了,由于曲线的起点和终点对应第一个通过的点和最后一通过的点,所以第一个通过的点和最后一个通过点也就是曲线的控制点。所以有

 

function

 

写成矩阵形式有

 

 

linear system

 

这里未知数就是P,解这个线性方程组求出控制点P后,再根据B-Spline曲线公式,带入控制点P和刚才求得的knots,就可以得到通过Q点的曲线了。

 

 

 

B-Spline Global Interpolation_第1张图片

 

B-Spline Global Interpolation_第2张图片

从上面图中是三次B-Spline曲线,可以看到是按照我们设定好的点来生成的。

 

 

 

 

 

 

 

 

 

 

 

 

*原创文章,转载请注明出处*

你可能感兴趣的:(B-Spline Global Interpolation)