2010-11-30 3 views
1

私は、各行が(A1、A2、B1、B2)(A、B点)として表示されるように、2次元平面上に定義された10000行を持っています。私は同一直線上にあるどのライン言う必要があるので、一般的に2d行のペアで操作を実行する最適な方法は何ですか?

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あるに:私は、私はラインの各ペアに対して実行する必要がある関数の配列を持っています。

私はboostと、必要なopensourceライブラリを使ってC++で行う必要があります。私はビジュアルスタジオ2010のウィンドウの下でそれを行います。

私のデータの高速計算を整理するのに役立つライブラリとその部分は何ですか?例えば、グラフを大きくすることは役に立ちますか?私は一般的にスピードアップのためにいくつかのスレッド/プロセッサの最適化を実行する必要があることを意味します。そして、私はそのすべてを実行するためのファンシービデオカードを持っていません...

+0

言い換えれば、10k行は、パフォーマンスについて心配する必要があるほど多くはありません。 – Puppy

答えて

1

すべての行にAngle関数を使用し、角度をキーとしてstd :: mapに結果を格納することができます。これにより、同様の角度の線が近づくため、すぐにNearlyParallelとCollinearをテストするペアを選択することができます。

+1

8本の平行線がある場合、angle(key)は同じになりますか? – rplusg

+0

@calvin:std :: multimap? –

関連する問題