相关知识:
对于给定的m+n+1个控制点,可以绘制m+1段光滑拼接的n次B样条曲线,每段曲线上点的位置由n+1个控制点决定,其中第i段曲线上参数t(0<=t<=1)对应的点为
上面的式子用来计算第i段曲线上的一个点,其中,基函数定义为
任务描述:
编写Python程序,调用OpenGL,绘制B样条曲线。
在空白处单击鼠标左键可以增加控制点并延长B样条曲线,鼠标左键单击某个控制点选中之后可以移动其位置以影响局部曲线形状,鼠标右键单击最后一个控制点可以将其删除。按下键盘上数字1可以绘制一次B样条曲线,按数字2绘制二次B样条曲线,按数字3绘制三次B样条曲线。
运行效果:
参考代码:
如果需要绘制更高次曲线,只需要对ascii_key()方法的代码略加修改即可。另外,上面的代码严格按照B样条曲线的定义进行编写,重复计算基函数值会导致效率略低,可以使用Numpy进行改写和优化,后文再推送相关代码。