判斷兩個矩形是否相交(C++)
阿新 • • 發佈:2019-01-19
最近在研究opencv識別紅綠燈的任務,用的是機器學習+影象處理的方法,但有個麻煩的問題就是誤識別率很高,為了把這些誤識別出的物體給過濾點,我想到了通過顏色佔比的方法來過濾,結果是可以過濾點一部分,但不能完全過濾。沒辦法,接下來有打算用紅綠燈框匹配燈的辦法來過濾,這就涉及到框矩形和燈矩形的匹配問題,又延伸到了平面座標系下兩個矩形的交叉問題,想了想,總結演算法如下。
#include <stdio.h>
int
between(
double
d1,
double
d2,
double
d3)
{
if
(d1 < d2) {
return
(d1 <= d3 && d3 <= d2);
}
else
{
return
(d2 <= d3 && d3 <= d1);
}
return
0;
}
/*
* 幾種重疊的情況
*
* 1. B 至少有一個頂點在 A 的內部
* -----------------
* |A |
* | |
* | ------------
* | | | |
* | | | |
* ------------|---- |
* | B|
* ------------
*
* 2. 如果 B 的頂點都在 A 的外部
* 重疊的條件是 A 的對角頂點至少有一個在 B 的內部
* 2.1
* ----------------------------
* | |
* | ----------------- |
* | |A | |
* | | | B|
* ----------------------------
* | |
* | |
* -----------------
*
* 2.2
* ----------------------------
* | |
* | ----------------- |
* | |A | |
* | | | |