登录论坛

查看完整版本 : [MATLAB基础] 求助此程序错误


zhengzhong89
2009-11-02, 17:58
我编了一个这样的程序,就是在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