在基本概念计算机图形中,样条曲线(spline curve )是由多项式曲线段连接而成的曲线,每个段的边界满足特定的连续性条件。 可以使用两组样条曲线来描述样条曲线曲面。

给定一组坐标点(称为控制点),可以得到样条曲线,表示曲线的大致形状。 根据这些坐标位置,可以用以下两种方法之一选择分段连续参数多项式函数: 如果选定的多项式使曲线通过每个控制顶点,则生成的曲线称为控制顶点的插值样条曲线。 另一方面,如果选定的多项式导致部分或全部控制顶点不在生成的曲线上,则生成的曲线称为控制顶点的近似样条曲线。

边框样条曲线这种样条近似方法是法国工程师朴素的白羊(Pierre Bzier )为雷诺公司设计汽车车身而开发的。 这里给出了其公式,并用VTK实现。 以下是官方介绍。

接下来是代码。 vtkBezierSplineSource类是基于以上表达式编写的。 完整的工程。

/* * * * * * * * * * * * * * * * * * * * * * * Mr .坦率的行人. all rights reserved.formoreinformationvision * * * * * * * * * * * * * * * */# includevtkpolydatamapper.h # includevtkrenderer.h # includevtkrenderwindow.h # includevtkactor.h includevtkinteractorstyletrackballcamera.h # includevtkproperty.h # includevtkpoints.h # includevtkspspsppoints include include ‘ vtkbeziersplinesource.h ‘ int main ({ double P0 [3]={-40.0,- 40.0,0.0 } ); double P1 [3]={-10.0,200.0,0.0 }; double p2[3]={ -40.0,- 200.0,0.0 }; double P3 [3]={ 40.0,40.0,0.0 }; vtkNewvtkPoints points; 点-插入下一个点(P0; 点-插入下一个点(P1; 点-插入下一个点(p2; 点-插入下一个点(P3; //splinepointsvtknewvtkspheresourcespheresource; she resource-setphiresolution (20; sphere source-setthetaresolution (20; sheresource-setradius(10; spheresource-Update (; vtknewvtkpolydata ctrlpointsdata; crlpointsdata-setpoints(points; vknewvtkglyph3dmapperctrlpointsmapper; ctrlpointsmapper-set input data (ctrlpointsdata; ctrlpointsmapper-setsourceconnection (sphere source-getoutputport ); ctrlpointsmapper-Update (; vtkNewvtkActor ctrlpointsactor; ctrlpointsactor-set mapper (ctrlpointsmapper; ctrlpointsactor-GetProperty ()-setcolor ) 1.0、0.0、0.0 ); //splinevtknewvtkbeziersplinesourcespline; sline-setcontrolpoints(points; tknewvtkpolydatamappersplinemapper; 样条映射设置连接(spline-getoutputport ) ); vtkNewvtkActor splineactor; spline actor-set mapper (spline mapper; splineactor-GetProperty ()-setcolor ) 1.0、0.0、0.0 ); //rendervtknewvtkrendererrenderer; 渲染添加加速器(ctrlpointsactor; 渲染添加加速器(spline actor; renderer-setbackground(1.0、1.0和1.0 ); vknewvtkrenderwindowrenderwindow; 渲染窗口设置(400,200 ); 渲染器窗口添加渲染器(renderer ); vknewvtkrenderwindowinteractorinteractor; 内部设置窗口; vknewvtkinteractorstyletrackballcamerastyle; 内部或设置(style; interactor-Initialize (; 内部或开始(; return EXIT_SUCCESS; }运行结果

参考资料《计算机图形学(第四版)》 [M]