搞了几天了,都没搞定,特来向高手们讨个主意,十分感谢!

这个代码是一个粒子在一个给定的范围内做随机运动,该范围内随机分布正方形固体边界,要求粒子如果遇到固体边界则保持不动,也就是说粒子不能运动到固体边界内部,看起来满简单的,但为什么我的代码不行呢?


clear all;
t= 50;%粒子运动次数
px=5;%粒子的初始x坐标
py=5;%粒子的初始y坐标
nx=10;%该范围x方向长度
ny=10;%y方向长度
ux=0;uy=0;D=0.1; deltat=1;
%%%%%%%%以上为输入的参数
%%定义固体边界
BOUND=zeros(nx,ny);BOUND=rand(nx,ny)>0.7;
BOUND(:,1:2)=1;
BOUND(:,9:10)=1;
BOUND(1:2,: )=1;
BOUND(nx,: )=1;BOUND(px,py)=0;
ON=find(BOUND==0);
%%边界定义结束

x(1)=px;  %用x,y数组来储存粒子在每一步的坐标
y(1)=py;
for i=1:t
    tempx=x(i)+ux*deltat+2*sqrt(D*deltat)*randn(1,1);
    tempy=y(i)+uy*deltat+2*sqrt(D*deltat)*randn(1,1);
    cx=ceil(tempx);
    cy=ceil(tempy);
    if(BOUND(cx,cy)==1)  %判断粒子下一步是否会进入边界内部,感觉这一步有问题,BOUND(cx,cy)是个逻辑变量,但即使改成“if (BOUND(cx,cy)==true)"也不行,粒子照样会进入边界内部,也就是说这个判断根本没起作用!?why?
      x(i+1)=x(i); y(i+1)=y(i);
    else
     x(i+1)=tempx; y(i+1)=tempy;
    end
end

figure;colormap(gray(2));image(2-BOUND');hold on;
plot(x,y);