本來以為要自己寫程式來畫圖,沒想到MATLAB有內建函式可用,而產生出來的圖叫做Voronoi Diagram,在時間不多的情況下,當然要直接拿來用囉~話說我知道怎麼產生1-NN的圖,在兩兩point相同距離的地方產生邊界,在概念上相當簡單,但若要寫成程式碼,考慮的條件還頗複雜。先來看一下我想產生什麼圖形吧!
接著我參考WIKI的Voronoi Diagram。

顏色混和的部份表示模糊邊界。
直接把MATLAB的實做程式碼貼上來(參考函式voronoi):
%DATA
W1=[0.28 1.31 -6.2;
0.07 0.58 -0.78;
1.54 2.01 -1.63;
-0.44 1.18 -4.32;
-0.81 0.21 5.73;
1.52 3.16 2.77;
2.20 2.42 -0.19;
0.91 1.94 6.21;
0.65 1.93 4.38
-0.26 0.82 -0.96];
W2=[0.011 1.03 -0.21;
1.27 1.28 0.08;
0.13 3.12 0.16;
-0.21 1.23 -0.11;
-2.18 1.39 -0.19;
0.34 1.96 -0.16;
-1.38 0.94 0.45;
-0.12 0.82 0.17;
-1.44 2.31 0.14;
0.26 1.94 0.08];
W3=[1.36 2.17 0.14;
1.41 1.45 -0.38;
1.22 0.99 0.69;
2.46 2.19 1.31;
0.68 0.79 0.87;
2.51 3.22 1.35;
0.60 2.44 0.92;
0.64 0.13 0.97;
0.85 0.58 0.99;
0.66 0.51 0.88];
P1=[0.5;1.0;0.0];
P2=[0.31;1.51;-0.50];
P3=[-0.3;0.44;-0.1];
%Instruction
plot(P1(1),P1(2),’s’)
hold on
plot(P2(1),P2(2),’d’)
plot(P3(1),P3(2),’o’)
legend(‘P1′,’P2′,’P3′)
x1=[W1(:,1);W2(:,1);W3(:,1)]%combine x1 of w1,w2,w3
x2=[W1(:,2);W2(:,2);W3(:,2)]%combine x2 of w1,w2,w3
voronoi(x1,x2);%Voronoi diagram
p1=plot(x1([1:10]),x2([1:10]),’.’)%w1
p2=plot(x1([11:20]),x2([11:20]),’+’)%w2
p3=plot(x1([21:30]),x2([21:30]),’*’)%w3
%set color
set(p1,’Color’,’red’,’LineWidth’,2)
set(p2,’Color’,’green’,’LineWidth’,2)
set(p3,’Color’,’blue’,’LineWidth’,2)
xlabel(‘x1’);
ylabel(‘x2’);
獲得結果如下:
結論:這讓我想起高中的生物課本,裡頭有細胞的圖片,很像這次作業的結果,原來這叫做Voronoi Diagram:P


隨意留個言吧:)~