您当前的位置:首页 > 计算机 > 编程开发 > Python

Python+Matplotlib绘制三次B样条曲线基函数图像

时间:01-10来源:作者:点击数:

问题描述:

在计算机图形学课程中,B样条曲线属于重要教学内容之一。已知,m+n+1个控制点可以确定m+1段光滑拼接的n次B样条曲线,其中第i段(i=0,1,2,...,m)曲线上点的定义为

fc23b353473d3a9e66309f188162f7f7.png

上式用来确定曲线上的一个点,其中dbff12d6d3c4bdb3b72bf485663c56f7.png表示控制点,基函数的定义为

07767c2d949b5532ece9a57840aea523.png

对基函数进行展开和化简可得,3次B样条曲线的4个基函数分别为

7acc65a3f0ecc7d1006a11255af1b6f4.png

和贝塞尔曲线类似,B样条曲线的控制点确定曲线的大致形状,曲线的性质则由基函数确定。

以端点性质为例,把t=0和t=1分别代入基函数定义和B样条曲线定义式,可得

b25d623eb3978f78c857d3741e8c759f.png

下图分别是1段3次B样条曲线和3段光滑拼接的3次B样条曲线,可以看出,与上面推导的结论是相符的。

ad4de1430431ad3a453e313275aedb3e.png
7acca43198916d8adf0076c3bfd60c0a.png

这一点也可以通过观察3次B样条曲线4个基函数的图像来验证,通过下面的函数图像可知,1段3次B样条曲线起点位置(t=0)由前3个控制点确定(权重或贡献分别为1/6、2/3、1/6),第4个控制点不起作用(权重为0);1段3次B样条曲线的结束位置(t=1)由最后3个控制点确定(权重分别为1/6、2/3、1/6),第1个控制点不起作用(权重为0)。这与通过数学公式推导的结果是一致的。

f7fc8ab9bdd8b1363c49d0b439a125f3.png

绘制上面基函数图像的代码如下:

7f83117fad5e49de26ac8e768032c1a4.png
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门