2010-11-01 177 views
1

我正在檢查兩個對象的交集..和我有一個類MBR數據成員低[2]和高[2] ..但我不getiing交叉..你解釋這個函數..相交函數

intersects(const MBR* h) const 
{ 
for (int i = 0; i < 2; i++) 
{ 
    if (low_[i] > h->high_[i] || high_[i] < h->low_[i]) 
    return FALSE; 
} 
return TRUE; 
+0

「交叉」是什麼意思?即你期望發生什麼? (這就是爲什麼像「MBR」這樣的非描述性名字不好) – 2010-11-01 02:31:13

+0

「但我不是在相交」,我想他問的是什麼函數「相交」。它可能只是一個巧合的名字。 – irrelephant 2010-11-01 02:33:41

+0

@irrelephant:嗯..我解析爲「我沒有得到我期望的計算,這應該是交集」。但我想這也可能是「我不明白相交」......我認爲這是不花時間在問題中不使用俚語的問題 - 這會導致用這種方式寫作時出現含糊不清的問題。 – 2010-11-01 02:36:18

回答

3

intersects一個MBR進行比較,以另一MBR和在第二MBR的high[]如果任何在第一MBR的low[]的值的比值大於返回FALSE(在各自的索引),或者如果在任何一個值,第一個MBR的high[]小於第二個MBR的low[]中的值(在各個索引中)。否則它返回TRUE。

+0

+1 - 因爲這是正確的答案,假設正確的翻譯「我沒有得到相交「是」我不明白「intersect'計算的功能」。如果OP回覆表明這是他的意圖,我也會刪除我的答案。 – 2010-11-01 02:37:55

+0

但是這個函數找到交集?而MBR實際上是最小邊界框 – piyapiya 2010-11-01 02:46:40

+0

@piyapiya:聽起來更像是你的意思是「包含」而不是「交集」。即你說這兩點定義了一個四邊形,並且想知道這樣的四邊形是否可以放入另一個四邊形。 – 2010-11-01 02:52:33

1

不太確定你相交的意思。如果你談論的是集合的交集,你可能應該使用std::set_intersection而不是試圖自己實現這種類型的東西。請記住,std::set_intersection要求輸入已經排序。

+0

,但在我的情況下,用戶給出了兩點p1和p2的形式x和y ..現在我要找到相交..如果你知道約9交點模型和MBR最小邊界框比你會理解它,我想要做什麼..但我沒有得到這個功能......它如何找到與我的班級MBR(兩個數據成員低[2]和高[2])的交集...和 – piyapiya 2010-11-01 02:44:28

+0

以及更多我我不明白在函數內部使用const,在函數原型的開始和結束處。 PLZ指向我一些只與const用法有關的鏈接。 – piyapiya 2010-11-01 02:48:29

+0

@piyapiya:我意識到沒有任何數學概念可以說兩點能夠「相交」。可能是兩條線或光線或線段,但不是點。 – 2010-11-01 02:50:54

1

如果一個盒子的上邊框小於另一個盒子的下邊框,則兩個盒子不會相交。同樣,如果一個盒子的下邊框大於另一個盒子的上邊框。否則這兩個盒子相交。

該檢查適用於X座標和Y座標。