基于MATLAB动态实现Bezier曲线几何作图

2015-12-24 01:51李朝红

李朝红 兰 虹

(齐齐哈尔高等师范专科学校 理工系,黑龙江 齐齐哈尔 161005)

基于MATLAB动态实现Bezier曲线几何作图

李朝红兰虹

(齐齐哈尔高等师范专科学校 理工系,黑龙江 齐齐哈尔 161005)

摘要:基于De Casteljau算法的Bezier曲线生成递归公式,利用MATLAB语言,动态绘制n次Bezier曲线生成,并给出了完整的MATLAB程序。通过动态生成曲线可以加深学生对抽象理论的理解。

关键词:Bezier曲线;De Casteljau算法;动态绘图

1De Casteljau算法与Bezier曲线

(1)

(2)

公式(2)可以用图1形象说明分割过程。当n=3,即三次Bezier曲线p(u)的分割过程如图1所示,其顶点变化如图2。

2MATALAB动态画图功能

MATLAB除了强大的矩阵运算、仿真分析外,绘图功能也是相当地强大。在MATLAB中有很多种绘制动态图形的方法,如AXIS 移动坐标系(适合于数据已经全部生成的场合,先画图,然后移动坐标轴);Hold On模式(先画上一帧,接着保留原始图像,追加下一帧图像,此种方式比较繁琐);Plot背景擦除模式(适合画动画,效率比较高,刷新闪烁小)等。

现利用绘图函数plot背景擦除模式来绘制De Casteljau算法动态生成Bezier曲线,在plot命令中加入“EraseMode”参数,“EraseMode”包含以下几种擦除方式:

(1)normal方式:使用该选项后,重画整个显示区,该模式产生的图像最准确,但较慢。

(2)background方式:将旧对象的颜色变成背景色,从而达到擦除的目的。这种模式将损坏被擦除对象下面的对象。

(3)xor方式:对象的绘制和擦除由该对象颜色与屏幕颜色的同异而定。只画与屏幕颜色不一致的新对象点,只擦除与屏幕颜色不一致的原对象点。该方式不损害被擦除对象下面的其他图像。

(4)none方式:不做任何擦除。

3MATLAB实现De Casteljau算法的动态绘制

h1=plot(x,y,′EraseMode′,′xor′);

h2=plot(x,y,′EraseMode′,′xor′);

h3=plot(x,y,′.′,′markersize′,10,′EraseMode′,′none′);

x=[0,0];y=[0,0];

plot(o(:,1),o(:,2),′r′);

hold on;

for u=0∶0.0005∶1

x1=[(1-u)*V(1,1)+u*V(2,1),(1-u)*V(2,1)+u*V(3,1),(1-u)*V(3,1)+u*V(4,1)];

y1=[(1-u)*V(1,2)+u*V(2,2),(1-u)*V(2,2)+u*V(3,2),(1-u)*V(3,2)+u*V(4,2)];

x2=[(1-u)*x1(1)+u*x1(2),(1-u)*x1(2)+u*x1(3)];

y2=[(1-u)*y1(1)+u*y1(2),(1-u)*y1(2)+u*y1(3)];

x3=(1-u)*x2(1)+u*x2(2);

y3=(1-u)*y2(1)+u*y2(2);

set(h1,′xdata′,x1,′ydata′,y1);

set(h2,′xdata′,x2,′ydata′,y2);

set(h3,′xdata′,x3,′ydata′,y3);

drawnow;

4结语

本文主要以MATLAB语言为基础,以De Casteljau算法为指导,动态生成n次Bezier曲线,并给出了完整的MATLAB程序。通过动态生成曲线,可以帮助学生在学习过程中,克服以静态的理论理解De Casteljau算法的想象局限,同时也可以使学生进一步理解掌握MATALB语言的应用,特别是动画程序设计。

参考文献:

[1]施法中.计算机辅助几何设计与非均匀有理B样条[M].北京:北京航空航天大学出版社,2001:114—256.

[2]张若楠,黄有度.一类有理Bézier曲线的等距线算法及MATLAB实现[J].大学数学,2012,(2):59—63.

[3]张志涌,杨祖樱.MATLAB教程[M].北京:北京航空航天大学出版社,2010:154—190.

责任编辑:柴造坡

作者简介:第一李朝红(1976—),女,黑龙江依兰人,副教授。研究方向:计算几何、数字图像处理。

基金项目:黑龙江省教育厅科学技术研究项目(编号:12535205)

收稿日期:2014-11-05

中图分类号:TP391.72

文献标志码:A

文章编号:1674-6341(2015)01-0024-02

doi:10.3969/j.issn.1674-6341.2015.01.011