Douglas-Peucker.m
上传用户:hdfuse
上传日期:2021-06-01
资源大小:3k
文件大小:1k
- function y=f21(x)
- e=0.5;
- x=0:0.01:2;
- y=sin(12*x.^2);
- plot(x,y);
- hold on;
- t=zeros(1,200);
- d=zeros(1,200);
- for i=2:199
- plot(x(1),y(1),'*');
- hold on
- A=(y(200)-y(1))/sqrt((y(200)-y(1))^2+(x(200)-x(1))^2);
- B=(x(200)-x(1))/sqrt((y(200)-y(1))^2+(x(200)-x(1))^2);
- C=(x(200)*y(200)-x(1)*y(1))/sqrt((y(200)-y(1))^2+(x(200)-x(1))^2);
- d(i)=abs(A*x(i)+B*y(i)+C)/sqrt(A^2+B^2);
- dh=max(d(i));
- if d(i)==dh
- t=i;
- end
- if dh>e
- plot(x(t),y(t),'*');
- hold on;
- break;
- end
- end
- for j=2:t-1
- A=(y(t)-y(1))/sqrt((y(t)-y(1))^2+(x(t)-x(1))^2);
- B=(x(t)-x(1))/sqrt((y(t)-y(1))^2+(x(t)-x(1))^2);
- C=(x(t)*y(t)-x(1)*y(1))/sqrt((y(t)-y(1))^2+(x(t)-x(1))^2);
- d(j)=abs(A*x(j)+B*y(j)+C)/sqrt(A^2+B^2);
- dh=max(d(j));
- if d(j)==dh
- t=j;
- end
- if dh>e
- plot(x(t),y(t),'*');
- hold on;
- end
- end
- for k=t+1:199
- A=(y(200)-y(t+1))/sqrt((y(200)-y(t+1))^2+(x(200)-x(t+1))^2);
- B=(x(200)-x(t+1))/sqrt((y(200)-y(t+1))^2+(x(200)-x(t+1))^2);
- C=(x(200)*y(200)-x(t+1)*y(t+1))/sqrt((y(200)-y(t+1))^2+(x(200)-x(t+1))^2);
- d(k)=abs(A*x(k)+B*y(k)+C)/sqrt(A^2+B^2);
- dh=max(d(k));
- if d(k)==dh
- t=k;
- end
- if dh>e
- plot(x(t),y(t),'*');
- break;
- end
- end