利用de Casteljau算法绘制Bezier曲线
2017-02-25 20:39
381 查看
在opengl版的de Casteljau算法http://blog.csdn.net/lafengxiaoyu/article/details/51296411的基础上进行代码的改写,看得出来在MATLAB之下代码还是比较简单的,直接放代码
二维的情况
运行结果如下图
跟上一篇博客的结果是一样的,well done
function decasteljau( vertices ) Dim=size(vertices,1);%二位或者三维空间 NumPoint=size(vertices,2)-1;%点的个数 x=zeros(1,NumPoint+1);y=zeros(1,NumPoint+1);z=zeros(1,NumPoint+1); xx=[];yy=[];zz=[]; if Dim==2 for t=0:0.001:1; for i=1:NumPoint for j=0:NumPoint-i if i==1 x(j+1) = (1 - t)*vertices(1,j+1) + t*vertices(1,j+2); y(j+1) = (1 - t)*vertices(2,j+1) + t*vertices(2,j+2); continue; end x(j+1) = x(j+1) * (1 - t) + x(j + 2) * t; y(j+1) = y(j+1) * (1 - t) + y(j + 2) * t; end end xx(end+1)=x(1); yy(end+1)=y(1); end plot(vertices(1,:),vertices(2,:),'b'); hold on;grid on; axis tight; xlabel('X');ylabel('Y'); plot(xx,yy,'r'); end if Dim==3 for t=0:0.001:1; for i=1:NumPoint for j=0:NumPoint-i if i==1 x(j+1) = (1 - t)*vertices(1,j+1) + t*vertices(1,j+2); y(j+1) = (1 - t)*vertices(2,j+1) + t*vertices(2,j+2); z(j+1) = (1 - t)*vertices(3,j+1) + t*vertices(3,j+2); continue; end x(j+1) = x(j+1) * (1 - t) + x(j + 2) * t; y(j+1) = y(j+1) * (1 - t) + y(j + 2) * t; z(j+1) = z(j+1) * (1 - t) + z(j + 2) * t; end end xx(end+1)=x(1); yy(end+1)=y(1); zz(end+1)=z(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(xx,yy,zz,'r'); view(3); end end下面还是对二维和三维的两种情况进行运行
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]'; decasteljau( vertices )运行结果如下图
二维的情况
vertices = [0 3; 3 7;7 2; 9 6;13 3]';
运行结果如下图
跟上一篇博客的结果是一样的,well done
相关文章推荐
- 利用de Casteljau算法绘制Bezier曲线
- 利用de Casteljau算法绘制Bezier曲面
- 利用de Casteljau算法绘制Bezier曲面
- 利用MATLAB绘制Bezier曲线
- 利用求值器绘制三次Bezier曲线
- 利用border绘制小三角
- 在OpenCV中利用鼠标绘制矩形和截取图像的矩形区域
- 利用 html5 canvas 简单绘制折线图
- 利用CAGradientLayer绘制颜色渐变动画
- Bezier曲线的绘制
- 利用UIView上手势控制OpenGL的绘制
- android游戏开发 深度解析利用位图绘制rpg地图
- 利用OpenCV绘制可变直线
- 利用 gnuplot 绘制时间序列图
- 利用CSS3的border-radius绘制太极及爱心图案示例
- MFC利用CPen与CBrush绘制实心圆
- 利用MsChart控件绘制多曲线图表
- 利用MATLAB绘制隐函数f(x,y)=x^2 * sin(x+y^2)+y^2 * exp(x+y)+5 * cos(x^2+y)=0的曲线
- 利用 gnuplot 绘制图 sar搜集数据
- 安卓杂记(四)利用自定义的PolyBezier()函数将一系列散点绘制成光滑曲线(二)