www.pudn.com > ridge_extract.rar > 5_ray.asv, change:2007-05-08,size:5396b
function [x,y]=5_ray(startx,starty,I,D,flag)
[r,c]=size(I);
% d=zeros(r,c);
if flag==0 %ÕýÏò¸ú×Ù
% for i=1:r
% for j=1:c
% if D(i,j)~=4
% d(i,j)=(D(i,j)-1)*pi/4;
% else
% d(i,j)=(D(i,j)-1)*pi/4+pi;
% end
% end
% end
switch D(startx,starty)
case 1
if ((starty+1)=r)&(I(startx,starty+1)==0)
x=startx;
y=starty+1;
elseif ((starty+2)=c)&(I(startx,starty+2)==0)
x=startx;
y=starty+2;
elseif ((starty+3)=c)&(I(startx,starty+3)==0)
x=startx;
y=starty+3;
elseif ((starty+4)=c)&(I(startx,starty+4)==0)
x=startx;
y=starty+4;
else
x=0;
y=0;
end
case 2
if ((startx-1)>=1)&((starty+1)=c)&(I(startx-1,starty+1)==0)
x=startx-1;
y=starty+1;
elseif ((startx-2)>=1)&((starty+2)=c)&(I(startx-2,starty+2)==0)
x=startx-2;
y=starty+2;
elseif ((startx-3)>=1)&((starty+3)=c)&(I(startx-3,starty+3)==0)
x=startx-3;
y=starty+3;
elseif ((startx-4)>=1)&((starty+4)=c)&(I(startx-4,starty+4)==0)
x=startx-4;
y=starty+4;
else
x=0;
y=0;
end
case 3
if ((startx-1)>=1)&(I(startx-1,starty)==0)
x=startx-1;
y=starty;
elseif ((startx-2)>=1)&(I(startx-2,starty)==0)
x=startx-2;
y=starty;
elseif ((startx-3)>=1)&(I(startx-3,starty)==0)
x=startx-3;
y=starty;
elseif ((startx-4)>=1)&(I(startx-4,starty)==0)
x=startx-4;
y=starty;
else
x=0;
y=0;
end
case 4
if ((startx+1)=r)&((starty+1)=c)&(I(startx+1,starty+1)==0)
x=startx+1;
y=starty+1;
elseif ((startx+2)=r)&((starty+2)=c)&(I(startx+2,starty+2)==0)
x=startx+2;
y=starty+2;
elseif ((startx+3)=r)&((starty+3)=c)&(I(startx+3,starty+3)==0)
x=startx+3;
y=starty+3;
elseif ((startx+4)=r)&((starty+4)=c)&(I(startx+4,starty+4)==0)
x=startx+4;
y=starty+4;
else
x=0;
y=0;
end
otherwise
error('Do not exsit this direction!')
end
elseif flag==1 %·´Ïò¸ú×Ù
switch D(startx,starty)
case 1
if ((starty-1)>=1)&(I(startx,starty-1)==0)
x=startx;
y=starty-1;
elseif ((starty-2)>=1)&(I(startx,starty-2)==0)
x=startx;
y=starty-2;
elseif ((starty-3)>=1)&(I(startx,starty-3)==0)
x=startx;
y=starty-3;
elseif ((starty-4)>=1)&(I(startx,starty-4)==0)
x=startx;
y=starty-4;
else
x=0;
y=0;
end
case 2
if ((startx+1)=r)&((starty-1)>=1)&(I(startx+1,starty-1)==0)
x=startx+1;
y=starty-1;
elseif ((startx+2)=r)&((starty-2)>=1)&(I(startx+2,starty-2)==0)
x=startx+2;
y=starty-2;
elseif ((startx+3)=r)&((starty-3)>=1)&(I(startx+3,starty-3)==0)
x=startx+3;
y=starty-3;
elseif ((startx+4)=r)&((starty-4)>=1)&(I(startx+4,starty-4)==0)
x=startx+4;
y=starty-4;
else
x=0;
y=0;
end
case 3
if ((startx+1)=r)&(I(startx+1,starty)==0)
x=startx+1;
y=starty;
elseif ((startx+2)=r)&(I(startx+2,starty)==0)
x=startx+2;
y=starty;
elseif ((startx+3)=r)&(I(startx+3,starty)==0)
x=startx-3;
y=starty;
elseif ((startx-4)>=1)&(I(startx-4,starty)==0)
x=startx-4;
y=starty;
else
x=0;
y=0;
end
case 4
if ((startx+1)=r)&((starty+1)=c)&(I(startx+1,starty+1)==0)
x=startx+1;
y=starty+1;
elseif ((startx+2)=r)&((starty+2)=c)&(I(startx+2,starty+2)==0)
x=startx+2;
y=starty+2;
elseif ((startx+3)=r)&((starty+3)=c)&(I(startx+3,starty+3)==0)
x=startx+3;
y=starty+3;
elseif ((startx+4)=r)&((starty+4)=c)&(I(startx+4,starty+4)==0)
x=startx+4;
y=starty+4;
else
x=0;
y=0;
end
otherwise
error('Do not exsit this direction!')
end
else
error('The parament "flag" is error!')
end