我在看看boost中的huiller算法的实现,似乎部分不正确。
参见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,第45-46页.C ++文件顶部的注释表明代码是从Graphics Gems 4中的代码派生的,尽管稍后在Graphics Gems 5中修正了代码。
当我尝试计算球体上多边形的面积时,我注意到了这一点,其中一个点是(0,0)。在这种情况下,即使多边形是逆时针定义的,它也总会返回负区域。使用(0,0)以外的点似乎可以缓解这个问题,这让我想知道发生了什么。
其他人可以确认这是一个问题吗?有什么建议干净地覆盖boost的实现,直到修复它为止?