|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
我想用下面的函数消去生成的随机多边形的凹点,使其成为凸多边形。其中用到了递归函数。
可是总是说我超出矩阵维!不知道是不是该函数的问题?!该子函数的代码如下:
function [S,R,n,x,y]=mydeleteconcave(S,R,n,x,y)
if S(n)>4 % 如果边数S(n)<=4,肯定为凸多边形
for i=4:length(x)
triangle1=det([x(i),y(i),1;x(i-2),y(i-2),1;x(i-1),y(i-1),1])
triangle2=det([x(i-3),y(i-3),1;x(i-2),y(i-2),1;x(i-1),y(i-1),1])
if triangle1.*triangle2>0
continue
else
x(:,i-1)=[];y(:,i-1)=[];R(:,i-1)=[];S(n)=S(n)-1; % 如果第i点为凹点,则消去第i-1点
[S,R,n,x,y]=mydeleteconcave(S,R,n,x,y);
end
end
end
**: S为多边形的边数;
R为以多边形内某点为心和各顶点形成的“半经”;
n表示生成的多边形个数;
x,y为第n个多边形的顶点坐标。
运行时总是显示:
??? Index exceeds matrix dimensions.
Error in ==> E:\matlab6.5\work\convexpolygon.m (myreuse)
On line 154 ==> tri1=det([x(i),y(i),1;x(i-2),y(i-2),1;x(i-1),y(i-1),1])
Error in ==> E:\matlab6.5\work\convexpolygon.m
On line 45 ==> [S,R,n,x,y]=myreuse(S,R,n,x,y)
恳请各位高人指点迷津,小弟感激不尽!
[ 本帖最后由 canglang 于 2007-5-19 22:15 编辑 ] |
|