1. 程式人生 > >判斷兩個矩形是否相交(C++)

判斷兩個矩形是否相交(C++)

最近在研究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              |      | * |   |               |      |