利用MATLAB绘制Bezier曲线
2017-02-20 20:43
1346 查看
暂时放弃了用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]';结果为
直接上代码,首先是直接利用基函数的绘制
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绘制信号时域波形和信号的频谱
- 利用MATLAB绘制三维彩色柱状图
- 利用de Casteljau算法绘制Bezier曲线
- 利用matlab中绘制多条y轴
- 利用matlab如何在图形中绘制箭头
- 将opengl的绘制效果利用OpenCV、Matlab保存成图片
- 利用matlab如何在图形中绘制箭头
- Matlab利用plot绘制正负样本散点图来分析数据
- Matlab 利用参数方程绘制空心球体
- 利用matlab在图形中绘制箭头
- Matlab 利用参数方程绘制空心球体
- 利用MATLAB绘制GTOPO30的DEM地形图
- 利用Matlab绘制梯度图、散度图、旋度图
- 【matlab】利用matlab在图形中绘制箭头、标注、圈圈 - 很帅很酷炫
- 利用de Casteljau算法绘制Bezier曲线
- MATLAB绘制矩阵权(Matrix weighted)有理Bezier曲线
- 利用MATLAB绘制隐函数f(x,y)=x^2 * sin(x+y^2)+y^2 * exp(x+y)+5 * cos(x^2+y)=0的曲线
- 利用Matlab绘制图像中的某一行或者某一列的灰度曲线
- 利用MATLAB绘制隐函数f(x,y)=x^2 * sin(x+y^2)+y^2 * exp(x+y)+5 * cos(x^2+y)=0的曲线
- matlab入门1--利用plot函数绘制正弦函数图形