ошибка в алгоритме boost :: geometrys_huiller геометрии? - PullRequest
1 голос
/ 25 февраля 2012

Я смотрел на реализацию алгоритма Уиллера в boost, и он кажется частично некорректным.

См. Надстройку / геометрию / стратегии / сферические / 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, пока это не будет исправлено?

...