1

我正在查看 huiller 算法在 boost 中的实现,它似乎部分不正确。

参见 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 中得到更正。

我在尝试计算球体上的多边形区域时注意到了这一点,其中一个点是 (0, 0)。在这种情况下,它总是会返回一个负面积,即使多边形是逆时针定义的。使用 (0,0) 以外的点似乎可以缓解问题,这让我想知道发生了什么。

其他人可以确认这是一个问题吗?在解决此问题之前,有什么建议可以干净地覆盖 boost 的实现吗?

4

0 回答 0