求兩個矩形之間的最小距離

2021-10-03 20:12:44 字數 1315 閱讀 6613

正在參與的工程裡有乙個小功能是求兩個矩形之間的最小距離。大致翻了一下opencv,貌似沒看到現成的函式,那就自己寫乙個好了。

(1) 不相交,但在x或y軸方向上有部分重合座標,比如矩形1和2,此時,最小距離為兩個矩形之間的最小平行距離或垂直距離,如圖中紅色箭線d12所示。

(2) 不相交,在x和y軸方向上均無重合座標,比如矩形1和3,此時最小距離為兩矩形距離最近的兩個頂點之間的距離,如圖中紅色箭線d13。

(3) 相交,此時距離為負數,如矩形1和4。

為了實現以上幾何關係,寫了個小函式:

int min_distance_of_rectangles(rect rect1, rect rect2)

//兩矩形不相交,在y軸方向有部分重合的兩個矩形,最小距離是左矩形的右邊線與右矩形的左邊線之間的距離

else if((dx >= ((rect1.width + rect2.width)/ 2)) && (dy < ((rect1.height + rect2.height) / 2)))

//兩矩形不相交,在x軸和y軸方向無重合的兩個矩形,最小距離是距離最近的兩個頂點之間的距離,

// 利用勾股定理,很容易算出這一距離

else if((dx >= ((rect1.width + rect2.width)/ 2)) && (dy >= ((rect1.height + rect2.height) / 2)))

//兩矩形相交,最小距離為負值,返回-1

else

return min_dist;

}

測試一下:

#include #include #include #include "opencv2/core/core.hpp"

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc.hpp"

using namespace std;

using namespace cv;

int main()

繪製的實驗影象:

最小距離計算執行結果如下,與預期的結果相同。

POJ 3608 求兩個凸包之間的最小距離

首先我們要知道一種遍歷所有對踵點的演算法 就是用旋轉卡殼加上叉積判斷是否旋轉的一種演算法。剩下的就是求對踵點了 因為我們不難發現,對於兩個凸包來說,他們之間的最小距離肯定在對踵點上。然後我們就可以去便利所有的對踵點這樣同時保留最小距離這樣就可以了。注意求乙個線段到另一條線段的最小距離應該用點積去算就...

求兩個矩形是否相交

getregion double x1,double y1,double x2,double y2,double dir,double allowshift 3 math.pi 180 else if math.abs dir math.pi 2 allowshift else if math.ab...

兩個單詞之間的編輯距離

參考部落格 給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3 解釋 horse rorse 將 h ...