- 积分
- 46
- 注册时间
- 2007-4-28
- 仿真币
-
- 最后登录
- 1970-1-1
|
最近看本老外的书,上面提到一个例子:一个球静止躺在一个方形的桌上,球被撞击一下,然后无限的运动,问在什么情况下,小球可以回到原来的点,老外给出的方法就是把平面区域展开的方法,给了一个例子,但是我模拟了下,感觉不对(按老外的观点NN次就可以回到原点,但是模拟的结果不是,我运行了2*NN次,大致回到那个位置,但是好像不在那个点,不知是不时计算精度的问题),以下是我的程序,我愿意和有兴趣的读者一起讨论,
-
- clear; clc; close all
- step = 0.01;
- N=1000;
- xdir=1;
- ydir=1;
- xlow=1;
- xup=2;
- hold on
- grid on
- set(gca,'GridLineStyle','-');
- daspect([1,1,1]);
- % [x,y] = meshgrid((xlow+.1):step:(xup-.1));
- % pos=unidrnd(numel(x));
- % x0=x(pos);
- % y0=y(pos);
- x0=1.2;
- y0=1.5;
- xs=x0;ys=y0;
- x2=x0;
- y2=y0;
- tanfz=3;
- tanfm=7;
- % tanfz=randint(1,1,[1,10]);
- % tanfm=randint(1,1,[1,10]);
- tany=tanfz/tanfm;
- axis([0 16 0 8]);
- plot(x0,y0,'go','markersize',5);
- h=plot(x0,y0,'r.','markersize',20);
- h1=plot(x0,y0,'g.','markersize',20);
- set(gca,'xtick',0:1:16,'ytick',0:1:8);
- gc=gcd(tanfz,tanfm);
- NN=tanfm/gc/step;
- for i=1:2*NN
- x1=x0;
- y1=y0;
- x3=x2;
- y3=y2;
- x0=x0+xdir*step;
- y0=y0+ydir*step*tany;
- x2=x2+step;
- y2=y2+step*tany;
- if x0>=xup || x0<=xlow
- xdir = -xdir;
- end
- if y0>=xup || y0<=xlow
- ydir = -ydir;
- end
- set(h,'xdata',x0,'ydata',y0);
- set(h1,'xdata',x2,'ydata',y2);
- plot([x1,x0],[y1,y0],'k-','linewidth',1);
- plot([x3,x2],[y3,y2],'y--','linewidth',1);
- pause(0.001);
- if dist([xs,ys],[x0;y0])<eps
- break
- end
- end
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|