私はすでにグラハム スキャンを実装していますが、私のプログラムのボトルネックは並べ替えです (80% の時間)。私はそれを改善したいと思います、今私は次のことをしています:
std::sort(intersections.begin() + 1, intersections.end(), [&minElement](Point const& a, Point const& b)
{return angle (minElement - a, XAxis) < angle (minElement - b,XAxis);});
これで正確な角度が得られますが、角度関数は次のようになるため、安価ではありません。
float angle (const Point& v1, const Point& v2) {
return dot (v1, v2) / (v1.Length () * v2.Length ());
}
Length 関数では、最もコストのかかる操作の 1 つである平方根を実行する必要があります。しかし、このようにして私は良い注文を得ます。
Slope、dot、ccw で配列を並べ替えてみましたが、比較から sqrt を削除するだけでしたが、どれも同じ並べ替えを提供しませんでした。何かアドバイスをいただけますか?