? ? ? ? 本文意在介紹關(guān)于計算兩組坐標(biāo)點的最近距離的簡單方法,可用此方法來計算兩個多邊形的最近距離以及距離最近的兩個點。下面展示具體實例。
函數(shù)代碼
function [ point1,point2,dis ] = Mindistance( F1,F2 )
%此函數(shù)為計算兩組坐標(biāo)點之間的最近距離并找出距離最近的一對坐標(biāo)點
%輸入分別為兩組坐標(biāo)點的二維數(shù)組,必須是n行兩列
max_x1=max(F1(:,1));max_x2=max(F2(:,1));
max_y1=max(F1(:,2));max_y2=max(F2(:,2));
max_x=max(max_x1,max_x2);
max_y=max(max_y1,max_y2);
img1_1=zeros(max_x,max_y);%建立一個二值圖像使兩數(shù)組中的點都可以出現(xiàn)在該圖中
img2_1=img1_1;
%讓數(shù)組F1,F2中的坐標(biāo)點各自顯現(xiàn)在兩個二值圖像中
for i0=1:length(F1(:,1))
img1_1(F1(i0,1),F1(i0,2))=1;
end
for i1=1:length(F2(:,1))
img2_1(F2(i1,1),F2(i1,2))=1;
end
[img1_2,dix] = bwdist(img1_1);%dix反映img1_1每個黑點對應(yīng)的最近的白點的索引下標(biāo)
img2_2=img2_1.*img1_2;%img2_2中不為0的點表示img2_1中該點到img1_1中點的最近距離
dis=min(img2_2(img2_2~=0));%找到兩個數(shù)組中的點的最近距離
[x1,y1]=find(img2_2==dis);%找出F2中距離F1最近的點的坐標(biāo)
L=length(x1);
point1=[L,2];
point2=cat(2,x1,y1);%設(shè)置point1,point2數(shù)組,記錄兩組坐標(biāo)點中距離最近的點的坐標(biāo)
for i=1:L
num=dix(x1(i),y1(i));
[x,y]=ind2sub([max_x,max_y], num); %來完成下標(biāo)到索引值的轉(zhuǎn)換。
point1(i,1)=x;
point1(i,2)=y;
end
end
????????該函數(shù)可以比較快速的計算兩組坐標(biāo)點之間的最小距離,并返回相應(yīng)的坐標(biāo)。缺點是只能計算整數(shù)坐標(biāo)值,且坐標(biāo)值需大于0。
測試程序
clc
img1=zeros(20,20);%首先生成一個20×20像素的二值圖像
for i=8:15
for j=8:i
img1(i,j)=1;
end
end
img1(16,9)=1;
img1(17,9)=1;
img1(18,9)=1;
img1(18,10)=1;%在二值圖像中隨意設(shè)計一個多邊形區(qū)域
[x1,y1]=find(img1==1);
f1=cat(2,x1,y1);
%再生成衣服同樣大小的二值圖像,里面同樣包含一個二值多邊形區(qū)域
img2=zeros(20,20);
img2(2,1)=1;
img2(2,2)=1;
img2(3,1)=1;
img2(3,2)=1;
img2(3,3)=1;
[x2,y2]=find(img2==1);
f2=cat(2,x2,y2);
[ point1,point2,dis ] = Mindistance( f1,f2 );%調(diào)用函數(shù)計算兩個多邊形的最小距離
figure(1)
imshow(img1|img2)%在一幅畫面中顯示兩個多邊形
hold on
plot(point1(:,2),point1(:,1),'*')
plot(point2(:,2),point2(:,1),'*')
tip=mean(cat(1,point1,point2));
text(tip(2),tip(1),num2str(dis),'color','b','FontSize',12,'HorizontalAlignment','center');%標(biāo)記距離
hold off
測試結(jié)果
文章來源:http://www.zghlxwxcb.cn/news/detail-720592.html
?從圖中可以看到兩個距離最近的坐標(biāo)點及兩點間的距離。文章來源地址http://www.zghlxwxcb.cn/news/detail-720592.html
到了這里,關(guān)于計算兩個多邊形的最近距離(MATLAB)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!