📄 s4_5_q9_old.m
字号:
function nearest_classify
% 画出数据点的位置
clear all;close all;clc;
w1=[10,0;0,-10;5,-2];
w2=[5,10;0,5;5,5];
w3=[2,8;-5,2;10,-4];
region=[-12 12 -12 12 100];
subplot(221);
patterns=[w1;w2]';
D=voronoi_regions(patterns, region);
% n=3;
% for i=1:n
% distmat=[];
% for j=1:n
% perpendicular_bisector(w1(i,:),w2(j,:));
% % dist=distant(w1(i,:),w2(j,:));
% % distmat(end+1)=dist;
% end
% % k=find(distmat==min(distmat));
% % perpendicular_bisector(w1(i,:),w2(k,:));
% end
% axis square;
subplot(222);
patterns=[w1;w3]';
D=voronoi_regions(patterns, region);
subplot(223);
patterns=[w2;w3]';
D=voronoi_regions(patterns, region);
subplot(224);
patterns=[w1;w2;w3]';
D=voronoi_regions(patterns, region);
function D = voronoi_regions(patterns, region)
% Make a Voronoi diagram from sample points
% Inputs:
% patterns - Input data patterns
% targets - Input data targets
% region - Decision region vector: [-x x -y y number_of_points]
N = region(5);
x = linspace (region(1),region(2),N);
y = linspace (region(3),region(4),N);
D = zeros(N);
[r,c] = size(patterns);
y_dist = (ones(N,1) * patterns(2,:) - y'*ones(1,c)).^2;
for i = 1:N
x_dist = ones(N,1) * (patterns(1,:)-x(i)).^2;
dist = abs(x_dist + y_dist);
[sorted_dist, indices] = min(dist');
D(i,:) = indices(1,:);
end
i=1:N^2;
rx=mod(i,N);rx(find(rx==0))=N;cy=ceil(i/N);
xn=x(rx)';yn=y(cy)';
cx=ceil(i/N);ry=mod(i,N);ry(find(ry==0))=N;
ind=sub2ind([N,N],cx,ry);
dr=D(ind);
dc=D(:);
in=1:N^2-1;
lp_c=find(dc(in)~=dc(in+1));
lp_c=lp_c(find(mod(lp_c,N)~=0));
xp_c=xn(lp_c);yp_c=yn(lp_c);
plot(xp_c,yp_c,'.b');hold on;
lp_r=find(dr(in)~=dr(in+1));
lp_r=lp_r(find(mod(lp_r,N)~=0));
xp_r=yn(lp_r);yp_r=xn(lp_r);
plot(xp_r,yp_r,'.b');
color=['r';'g';'b';'m';'k';'y'];
% C=color(dc,:);
% for i=1:N^2
% plot(xn(i),yn(i),'s','MarkerFaceColor',C(i,:));
% end
pn=size(patterns,2);
for i=1:pn
plot(patterns(1,i),patterns(2,i),'o','MarkerFaceColor',color(ceil(i/3),:));
end
plot(region(1):region(2),zeros(1,region(2)-region(1)+1),'k');
plot(zeros(1,region(4)-region(3)+1),region(3):region(4),'k');
axis(region(1:4));axis square;
function dist=distant(point1,point2)
x1=point1(1);y1=point1(2);
x2=point2(1);y2=point2(2);
dist=sqrt((x2-x1)^2+(y2-y1)^2);
function perpendicular_bisector(point1,point2)
x1=point1(1);y1=point1(2);
x2=point2(1);y2=point2(2);
x3=mean([x1,x2]);y3=mean([y1,y2]);
if y2~=y1
ko=-(x2-x1)/(y2-y1);
b=y3-ko*x3;
end
[range,xory]=max([x2-x1,y2-y1]);
step=range/50;
if xory==1
if y2==y1
y4=x3-range/2:step:x3+range/2;
x4=x3*ones(1,length(y4));
else
x4=x3-range/2:step:x3+range/2;
y4=ko*x4+b;
end
elseif xory==2
x4=x3-range/2:step:x3+range/2;
y4=ko*x4+b;
end
plot(x4,y4,'k','LineWidth',2);hold on;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -