利用MATLAB绘制Bezier曲线

Posted 拉风小宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用MATLAB绘制Bezier曲线相关的知识,希望对你有一定的参考价值。

暂时放弃了用opengl绘图。因为数据结构略复杂,暂时投奔了MATLAB的怀抱,下面利用MATLAB改写绘制Bezier曲线的代码

直接上代码,首先是直接利用基函数的绘制

function bezier( vertices )
%BEZIER 绘制Bezier曲线

Dim=size(vertices,1);%二位或者三维空间
NumPoint=size(vertices,2)-1;%点的个数
t=0:0.001:1;
x=[];y=[];z=[];
if Dim==2
     x=(1-t).^(NumPoint)*vertices(1,1);
     y=(1-t).^(NumPoint)*vertices(2,1);
  for j=1:NumPoint
      w=factorial(NumPoint)/(factorial(j)*factorial(NumPoint-j))*(1-t).^(NumPoint-j).*t.^(j);
      x=x+w*vertices(1,j+1);y=y+w*vertices(2,j+1);
  end
plot(vertices(1,:),vertices(2,:),'b');
hold on;grid on;
axis tight;  
xlabel('X');ylabel('Y');
plot(x,y,'r');
end

if Dim==3
    x=(1-t).^(NumPoint)*vertices(1,1);
    y=(1-t).^(NumPoint)*vertices(2,1);
    z=(1-t).^(NumPoint)*vertices(3,1);
 for j=1:NumPoint
     w=factorial(NumPoint)/(factorial(j)*factorial(NumPoint-j))*(1-t).^(NumPoint-j).*t.^(j);
     x=x+w*vertices(1,j+1);y=y+w*vertices(2,j+1);z=z+w*vertices(3,j+1);
 end
plot3(vertices(1,:),vertices(2,:),vertices(3,:),'b');
hold on;grid on;
axis tight;  
%axis([0.5,1.5,0.5,1.5,0,0.7]);
xlabel('X');ylabel('Y');zlabel('Z');
plot3(x,y,z,'r');
view(3);
end

end

不得不佩服MATLAB的强大。。
下面展示两个例子

vertices=[0.8 0.8 0;1.4 0.6 0;1.5 0.7 0.5;1.5 1.5 .5;0.6 1.4 0;1.5 1.5 0]';
bezier( vertices )

再去掉代码中关于坐标轴的注释,效果如下


如果是二维的,点换做

vertices = [0 3; 3 7;7 2; 9 6;13 3]';
结果为


以上是关于利用MATLAB绘制Bezier曲线的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3 Scribble Mouse Trail - 使用Greensock的Bezier插件绘制Bezier曲线

12月学习进度6/31——计算机图形学期末准备03Bezier曲线及MATLAB实现

动画Bezier曲线,就像在iPhone屏幕上绘制一样

如何在matlab同一个图形上绘制多条曲线

Matlab利用序列离散点绘制渐变颜色空间曲线

bezier曲线的一个计算问题