日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【MATLAB】求点到多边形的最短距离

發(fā)布時間:2025/3/11 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【MATLAB】求点到多边形的最短距离 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 0.引言
  • 1.原理
  • 2.代碼及實用教程

0.引言

\qquad點與多邊形的關(guān)系無非三種——內(nèi)部、上、外部。本文定義點在多邊形內(nèi)部距離為負,點在多邊形邊上距離為0,到多邊形外部距離為正。

1.原理

計算點到多邊形的距離分為3個步驟:

  • 判斷點與多邊形的關(guān)系
  • 計算點到多邊形每條邊的最短距離
  • 得到最終的距離標量(含符號)
  • 關(guān)于原理方面,由于以下鏈接已經(jīng)講解地非常完美,本文不再摘錄:
    求點到多邊形的距離
    需要提醒讀者的是,該文中存在部分筆誤的情況(但原理部分比較通俗易懂),例如

    藍線處應(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)部為負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?

    >> clear >> poly = [0,0;0,1;1,1;1,0]; >> P = [0.5;0.5]; >> dis2poly(P,poly)ans =-0.5000


    點在多邊形內(nèi)部,很顯然最短距離為0.5,符號為負。

    總結(jié)

    以上是生活随笔為你收集整理的【MATLAB】求点到多边形的最短距离的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。