Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2009-11-02, 17:58   #1
zhengzhong89
初级会员
 
注册日期: 2009-11-02
年龄: 36
帖子: 1
声望力: 0
zhengzhong89 正向着好的方向发展
默认 求助此程序错误

我编了一个这样的程序,就是在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
zhengzhong89 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 11:34


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.