声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3773|回复: 2

[绘图技巧] MATLAB怎么画Bezier曲线曲面

[复制链接]
发表于 2006-5-11 18:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
请教高手,怎么样用MATLAB画Bezier曲线曲面和B样条曲线曲面,急啊
回复
分享到:

使用道具 举报

发表于 2006-5-12 08:41 | 显示全部楼层

回复:(royle0913)MATLAB怎么画Bezier曲线曲面

Bezier曲线【zz】

  1. % Faculty of Engineering, University of Fukui. 2004/07/07
  2. % coded by Sokthai Chan (sokthai@wireless.fuis.fukui-u.ac.jp)
  3. % Bezier Curve乮Infinite Sign乯

  4. % clear all the variable from memory
  5. clear all;

  6. % Data Setting
  7. t=[-0.8 -0.6 -1/4 1/2 1 3/2 1 1/2 -1/4 -0.6 -0.8];
  8. p=[0 0.9 0.9 -3/2 -3/2 0 3/2 3/2 -0.9 -0.9 0];

  9. n=11;
  10. a=-1;
  11. b=1;
  12. x=-1:0.01:1;
  13. m=length(x);

  14. % Matrix Setting
  15. Pn=zeros(1,m);
  16. Pv=zeros(1,m);
  17. Tv=zeros(1,m);

  18. Ts=((1:n)-1)*(b-a)/(n-1)+a; % Equally Divided Point

  19. % Calculation Bezier Curve
  20. for j=1:m
  21. for i=1:n
  22. B(i)=(nchoosek(n-1,i-1)*realpow(b-x(j),n-i)*realpow(x(j)-a,i-1))/realpow(b-a,n-1); % Base Function of Bernstein
  23. Pn(j)=Pn(j)+p(i)*B(i); % Scalar Bezier Curve
  24. Tv(j)=Tv(j)+t(i)*B(i); % Equally Divided Point
  25. Pv(j)=Pv(j)+p(i)*B(i); % Vector Bezier Curve
  26. end
  27. end

  28. % Plot Graphic
  29. figure(1)
  30. plot(x,Pn,'*',Ts,p,'-');
  31. legend('Scalar Bezier Curve','Bezier Control Polygon');
  32. xlabel('x'); ylabel('Pn(x)');
  33. title(['Bezier Curve']);

  34. figure(2)
  35. plot(Tv,Pv,'*',t,p,'-');
  36. legend('Vector Bezier Curve','Bezier Control Polygon');
  37. xlabel('x'); ylabel('Pn(x)');
  38. title(['Bezier Curve']);
复制代码

[ 本帖最后由 suffer 于 2007-6-3 12:06 编辑 ]

评分

1

查看全部评分

发表于 2006-5-12 15:08 | 显示全部楼层
suffer老兄,可以指点一下t和p的设置依据吗?再次,查看手头上的文献,好像Berstein基函数并不时程序中那样,且其中的变量x(j)的取值范围也是0~1。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-6-17 03:55 , Processed in 0.060618 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表