2010-11-30 76 views
1

所以我在2d平面上定義了10 000行,以便每行顯示爲(A1,A2,B1,B2)(A,B點)。我的函數數組我需要在每對線進行:在二維線對上執行操作的最佳方法是什麼?

Angle(A,B) 
    return Atan((B.y-A.y)/(B.x-A.x)) 

NearlyParallel(angle1, angle2) 
    delta = Abs(angle1-angle2) 
    return (delta < threshold) or (delta > Pi-threshold) 

Collinear(A,B, C,D) 
    return NearlyParallel(Angle(A,C), Angle(B,D)) and NearlyParallel(Angle(A,D), Angle(B,C)) 

所以一般我需要說哪一行是共線,其和哪一個是NearlyParallel到另一個的每一行。

我需要在C++中使用boost和任何所需的開源庫來完成它。我在Visual Studio 2010的窗口下執行。

什麼庫及其部分可以幫助我組織快速計算數據?將例如提升圖形庫有幫助?我的意思是通常我需要執行一些線程/處理器優化來加速。我不會有任何花哨的視頻卡來執行這一切...

+0

只需要提一下,10k線的距離不會太多,因爲您需要開始擔心性能。 – Puppy 2010-12-01 00:21:39

回答

1

你可以在每一行上使用你的Angle函數,並將結果存儲在std :: map中,使用角度作爲鍵。這將使具有相似角度的線條靠得很近,因此您可以快速選擇線對來測試NearlyParallel和Collinear。

+1

如果有8條平行線,那麼角度(鍵)會是相同的? – rplusg 2010-12-01 06:37:20

相關問題