B-Spline Global Interpolation

<script src="http://widgets.amung.us/classic.js" type="text/javascript"></script> <script type="text/javascript"> </script>

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点的曲线了。

 

 

 

图1

 

图2

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

 

 

 

 

 

 

 

 

 

 

 

 

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

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

张赐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值