找回密码
 注册
关于网站域名变更的通知
查看: 625|回复: 1
打印 上一主题 下一主题

万花尺的动态模拟程序 

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-7-30 10:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 helendcany 于 2020-7-30 10:39 编辑
7 ?. L! n7 O1 }0 V3 r' M
" I2 a4 m6 K' i; l1 V& c; Y& p
万花尺的动态模拟程序
& S8 I( q. O9 _' ]
! G9 B5 u5 a: ~% K
萬花尺原理:
# ]3 \7 ?, N( z萬花尺有著一個普遍的公式,即 。其中,R為大圓半徑,r為小圓半徑。若這樣的k 和M存在,則稱為k圈M花尺。其中k為小圓圓心繞大圓圓心轉過的圈數,M為花瓣的個數。
( i; t9 H9 _9 C- l/ A7 ^: l9 F
  • function flowers(a,b,r,mode,N,gifname)
  • %万花尺程序
  • %input -a 大圆半径 -b 小圆半径 -r 画笔距小圆圆心的距离
  • % -mode :非0 表示小圆沿大圆内侧转动
  • % 0 表示小圆沿大圆外侧转动
  • % a = 4;b = 1.2;mode =1;r = b;%10花尺
  • % a = 4;b = 2;mode =1;r = 3;%2花尺
  • % a = 4;b = 1;mode =1;r = b;%4花尺
  • % a = 4;b = 1.5;mode =1;r = b;%8花尺
  • % a = 4;b = 0.75;mode =1;r = b;%16花尺
  • % a = 4;b = 8/3;mode =1;r = b;%6花尺
  • % a = 4;b = 8/9;mode =1;r = b;%9花尺
  • % a = 4;b = 4/3;mode =1;r = b/2;%3花尺
  • % a = 4;b = 1;mode =1;r = b/2;%4花尺
  • % a = 4;b = 2;mode =1;r = b;%2花尺
  • if nargin < 3,r = b;end
  • if nargin < 4 || mode,mode = -1;else mode = 1;end
  • if nargin < 5,N = 10;end
  • if nargin < 6,gifname = 'flowers.gif';end
  • [k,m] = cylnumber(a,b,N);
  • t = 0:pi/200:2*k*pi;
  • tt = 0:pi/200:2*pi;
  • x1 = a+mode*b;
  • xx = a*cos(tt); yy = a*sin(tt);
  • plot(xx,yy);
  • xm = a+abs(abs(r)+mode*b);
  • axis equal off
  • title([num2str(m),'花尺'])
  • %设置颜色、标记、标记尺寸、擦除模式
  • h = line('Color','k','Marker','*',...
  •     'MarkerSize',1,'EraseMode','xor');
  • h2 = line('Color','k','Marker','.',...
  •     'MarkerSize',8,'EraseMode','xor');
  • h1 = line('Color','r','Marker','.',...
  •     'MarkerSize',20,'EraseMode','xor');
  • n = length(t);
  • if mode == -1,nk = n:-1:1;else nk = 1:n;end
  • for k = 1:n
  •     x = x1*cos(t(k))+r*cos(x1/b*t(nk(k)));
  •     y = x1*sin(t(k))+r*sin(x1/b*t(nk(k)));
  •     x2 = x1*cos(t); y2 = x1*sin(t);
  •     x3 = x2(k)+b*cos(tt); y3 = y2(k)+b*sin(tt);
  •     hold on
  •     set(h,'xdata',x3,'ydata',y3); %画图、画线设置
  •     plot(x,y,'r.');
  •     set(h2,'xdata',[x x2(k)],'ydata',[y y2(k)]);
  •     set(h1,'xdata',[x x],'ydata',[y y]);
  •     axis([-xm,xm,-xm,xm]);
  •     try
  •         f = getframe;
  •         imind = frame2im(f); %将单帧图像转化为RGB图像
  •         [imind,cm] = rgb2ind(imind,256);
  •         if k ~= 1
  •             imwrite(imind,cm,gifname,'gif','WriteMode','append','DelayTime',.05)
  •         else
  •             imwrite(imind,cm,gifname,'gif','Loopcount',inf,'DelayTime',.05)
  •         end
  •     end
  •     pause(0.00001)
  • end
  • function [k,m] = cylnumber(a,b,N)
  • k = 1;
  • m = a/b;
  • while rem(m,1) && k < N
  •     k = k + 1;
  •     m = k*a/b;
  • end
    # y8 b4 ]" l9 `( V- o# h- f7 n
, f9 @9 K8 i8 i: b! @5 X: ^
  N, u5 G' i  f# i
* m6 O5 L# U$ B' U

% C% ?& b1 v5 p8 a
; N1 U, S# m6 D, v8 g7 g# S( m

该用户从未签到

2#
发表于 2020-7-30 11:25 | 只看该作者
厉害了,图说明的很明了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-27 07:45 , Processed in 0.109375 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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