我正在查看 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 的实现吗?