日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

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

文章目錄

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

0.引言

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

1.原理

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

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

    藍線處應為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; % 內部為負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的判定點是否在多邊形內部的函數inpolygon會返回意料之外的結果。以下是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


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

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。