1

ブーストでのホイラーアルゴリズムの実装を見ていましたが、部分的に間違っているようです。

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) 以外のポイントを使用すると、問題が軽減されるように見えたので、何が起こっているのか疑問に思いました。

これが問題であることを他の誰かが確認できますか? これが修正されるまで、ブーストの実装をきれいにオーバーライドするための提案はありますか?

4

0 に答える 0