MATLAB编的道格拉斯普克抽稀函数,变量如何设置?
我的抽稀数据是我随便用函数生成的,假如就是x=[-10:.2:10];y=[-10:.2:10];z=sin(.7*x)+cos(.9*y);我的抽稀思想是:(1)给定N个数据点,计算中间点到始末点连线的距离,若最大距离值大于给定阈值,则记录此点(特征点),然后把点列分成前后段,同时调用此函数。最后得到的是曲线的特征点和始末点。我的抽稀函数如下:%采用道格拉斯-普克法(改进)对第j条测线进行抽稀
function c_dpr=dpr(A,B,emp_s,emp_e,k_dpr,xyz)
%dpr,对当前测线进行道格拉斯-普克(改进)抽稀
%c_dpr,抽稀过后的点集在xyz矩阵中的点号
%A,当前抽稀线段的起点
%B,当前抽稀线段的末点
%k_dpr,道格拉斯垂距限值
%xyz,当前抽稀测线坐标矩阵
c_dpr(1)=[emp_s];%把测线始点的点号放入抽稀点集中
D=B;%声明变量D,并赋予初值为当前抽稀线段的末点
if B-A>1
for rj=1:B-A-1
rd(rj)=norm(cross(xyz(A,:)-xyz(B,:),xyz(rj+A,:)-xyz(A,:)))/norm(xyz(A,:)-xyz(B,:));%逐点求AB之间的点到直线AB上的垂距
end
[max_rd,max_ind]=max(rd);%取垂距最大值及其在垂距向量rd中的点号
maxid=max_ind+A;%垂距最大值在xyz中的点号
rd=zeros(1,1);
else
max_rd=0;%如果始末点之间没有点,就设其间的最大垂距为0
end
if max_rd>k_dpr
B=maxid;
D=B;
c_dpr=[c_dpr,B];%把最大垂距点的点号放入抽稀点集中
c_dpr=[c_dpr,dpr(A,B,emp_s,emp_e,k_dpr,xyz)];
else
if D<emp_e
c_dpr=[c_dpr,dpr(B,D,emp_s,emp_e,k_dpr,xyz)];%当上一末点小于测线末点,且上一最大垂距小于限值时,以上一末点B为始点,上上末点D为末点
end
end
c_dpr=[c_dpr,emp_e];%把测线最后一点的点号放入抽稀点集中
%测线抽稀完
其中的变量D的赋值有错误,中间老变,但我不知道应该怎么设置,或许在MATLAB里还有除了递归的其他方法,希望高手能指点一下。若改正后函数能运行正确,定将追加分数(全部分都给你也行),谢谢大家啦!帮帮我吧,我已经调了两个星期啦!