Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
初级会员
注册日期: 2009-11-02
年龄: 36
帖子: 1
声望力: 0 ![]() |
![]()
我编了一个这样的程序,就是在y轴上取一点然后再取一个斜率,做射线在[0,1]X[0,1]这个矩形区域内反射,矩形的边相当于镜子,但是比如取linecross(0.5,0.5)时运行正常,但取linecross(1.4,0.5)就出现错误
??? Attempted to access c(48); index out of bounds because numel(c)=47. Error in ==> linecross at 30 x=min(c(i),c(i+1)):0.01:max(c(i),c(i+1)); 新手不太懂什么意思,望高人指点下!!!! 源程序: function linecross(k,v) %循环次数 n=400; %y轴上的点坐标 c(1)=0; d(1)=v; %选的矩形区域 x=0:0.01:1; y=0:0.01:1; plot(x,y,'w') hold on %反射循环 for i=1:n %求截距及与矩形边的交点 b=d(i)-k*c(i); x(1)=(1-b)/k; y(1)=k*x(1)+b; x(2)=-b/k; y(2)=k*x(2)+b; x(3)=0; y(3)=k*x(3)+b; x(4)=1; y(4)=k*x(4)+b; %选择反射点 for j=1:4 if (x(j)<=1)&(x(j)>=0)&(y(j)<=1)&(y(j)>=0)&(x(j)~=c(i))&(y(j)~=d(i)) c(i+1)=x(j); d(i+1)=y(j); else end end %画出光线 x=min(c(i),c(i+1)):0.01:max(c(i),c(i+1)); y=min(d(i),d(i+1)):0.01:max(d(i),d(i+1)); y=k*x+b; plot(x,y,'b') hold on %射到矩形的角的特殊情况 if (c(i+1)==0&d(i+1)==0)|(c(i+1)==1&d(i+1)==0)|(c(i+1)==0&d(i+1)==1)|(c(i+1)==1&d(i+1)==1) k=1/k; else %普通情况 k=(-1)*k; end end |
![]() |
![]() |