ブーストでのホイラーアルゴリズムの実装を見ていましたが、部分的に間違っているようです。
boost/geometry/strategies/spherical/area_huiller.hpp を参照してください。
apply() 関数では、
if (lon2 < lon1)
{
E = -E;
}
代わりにそうあるべきだと私は信じています
calculation_type lon;
if( lon2 < lon1 )
lon = lon1 - lon2;
else
lon = lon1 - lon2 + two_pi;
if( 2 * half_pi < lon )
E = -E;
Graphics Gems 5、pg 45 - 46 によると、C++ ファイルの上部にあるコメントは、コードが Graphics Gems 4 のコードから派生したものであると述べていますが、コードは Graphics Gems 5 で後で修正されました。
ポイントの 1 つが (0, 0) である球上のポリゴンの面積を計算しようとしたときに、これに気付きました。その場合、ポリゴンが反時計回りに定義されていても、常に負の領域が返されます。(0,0) 以外のポイントを使用すると、問題が軽減されるように見えたので、何が起こっているのか疑問に思いました。
これが問題であることを他の誰かが確認できますか? これが修正されるまで、ブーストの実装をきれいにオーバーライドするための提案はありますか?