【MATLAB】求点到多边形的最短距离
生活随笔
收集整理的這篇文章主要介紹了
【MATLAB】求点到多边形的最短距离
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 0.引言
- 1.原理
- 2.代碼及實用教程
0.引言
\qquad點與多邊形的關(guān)系無非三種——內(nèi)部、上、外部。本文定義點在多邊形內(nèi)部距離為負(fù),點在多邊形邊上距離為0,到多邊形外部距離為正。
1.原理
計算點到多邊形的距離分為3個步驟:
關(guān)于原理方面,由于以下鏈接已經(jīng)講解地非常完美,本文不再摘錄:
求點到多邊形的距離
需要提醒讀者的是,該文中存在部分筆誤的情況(但原理部分比較通俗易懂),例如
藍(lán)線處應(yīng)為d[0]-a[0],d[1]-a[0]
2.代碼及實用教程
function minD = dis2poly(p,poly) % 計算點p到多邊形poly的最短距離 % poly的每一行都是一條邊if inpolygon(p(1),p(2),poly(:,1),poly(:,2))k = -1; % 內(nèi)部為負(fù)elsek = 1; % 外部為正endminD = Inf;for i = 1:size(poly,1)-1 % 邊序號D = dis2edge(p,poly(i,:)',poly(i+1,:)');if D < minDminD = D;endendminD = k*minD;function d = dis2edge(P,A,B)% P為計算點,A、B為邊的兩個頂點 % 三者均為列向量AB = B-A;AP = P-A;BP = P-B;t = (AB'*AP)/(AB'*AB);if t<0d = norm(AP); elseif 0<=t && t<=1d = norm(P-t*AB);elsed = norm(BP);endend end\qquad輸入多邊形時,需要多邊形是封閉的(即第一個點與最后一個點相同),否則MATLAB的判定點是否在多邊形內(nèi)部的函數(shù)inpolygon會返回意料之外的結(jié)果。以下是2個計算示例:
>> clear >> poly = [0,0;0,1;1,1;1,0]; >> P = [2;2]; >> dis2poly(P,poly)ans =1.4142
從上圖也可以看出顯然最短距離是2\sqrt22?
點在多邊形內(nèi)部,很顯然最短距離為0.5,符號為負(fù)。
總結(jié)
以上是生活随笔為你收集整理的【MATLAB】求点到多边形的最短距离的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Matlab】扩展卡尔曼滤波器原理及仿
- 下一篇: 英语笔记:写作:Limiting the