利用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]";结果为
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: C++ 实现动态定义三维内的数组
- 下一篇:没有了