簡體   English   中英

計算兩個任意形狀之間的最小距離

[英]Calculate minimum distance between two arbitrary shape

我有兩個任意形狀。 現在我想計算兩個形狀之間的最小距離。 我在這里附上圖片

在此處輸入圖片說明

首先繪制部分完成。 這個形狀是圓弧和線的組合。 現在,當我要計算這些形狀之間的最小距離時,我遇到了問題。 使用 GWT (java) html5 畫布繪制此形狀。

為了計算兩個形狀之間的最小距離,我在 java 中使用了下面的代碼,但我沒有得到任何優化的方法來做到這一點 -

private double calculateMinimumDistance(Coordinate[] coordinates_1, Coordinate[] coordinates_2) { 
    double minDistance = 100000;
    double currentDistance = 0;

    for(int i = 0; i < coordinates_1.length; ++i) {
      for(int j = 0; j < coordinates_2.length; ++j) {
        currentDistance = coordinates_1[i].distanceTo(coordinates_2[j]);
        if(currentDistance < minDistance) {
          minDistance = currentDistance;
        }  
      } 
    }

    return minDistance;
}

坐標_1 包含形狀 1 的點的集合。
坐標_2 包含形狀 2 的點的集合。

是否有任何優化的方法來計算兩個形狀之間的距離? 這種形狀可以是任何位置和任何類型的形狀。

我們可以通過計算線到線或線到弧或弧到弧之間的距離來以優化的方式計算兩組點之間的最小距離,而不是計算兩組點之間的最小距離。 通過這種方式,我們可以以優化的方式計算最小距離。

這個想法是將形狀表示為頂點列表。 然后為了找到任意形狀之間的最小距離,我將實現基本算法來找到兩個凸形狀之間的距離。 然后將任意形狀拆分為一組不相交的凸形狀,計算不同對之間的所有距離並獲得最小距離。

要計算兩個凸形狀之間的距離,只需遍歷頂點對的所有組合,計算距離並取最小值。 當然,這種方法將需要 n^2 次操作,因此您可能需要對其進行優化。 您可以使用一些簡化形式的形狀:例如,將每個形狀表示為 8-10 個基本點形狀,然后在每個形狀上找到與另一個形狀最接近的邊,然后搜索邊內的點。

將這兩個形狀視為平面上兩組不同的點。 然后測量從第一組中的每個點到第二組中的每個點的距離。

為此使用嵌套的 for 循環並使用坐標幾何的距離公式測量距離。

僅存儲最短距離,如果您希望兩點與距離重合。

對於輪廓A和輪廓B中的每個點,使用距離公式來計算斜邊:hypot=sqrt(xA-xB)^2+(yA-yB)^2)...我正在為一組解決同樣的問題N 個輪廓,所以我會在完成后分享我的代碼。

使用 Imgproc.distanceTransform 查找圖像中所有點到第一個形狀的距離。 將結果與第二個形狀相交。 在結果地圖中找到最小的非零值,這就是您的最小距離。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM