На основании Как определить, находится ли список точек многоугольника по часовой стрелке?
Я придумал следующий код:
bool PointsClockwise(const std::vector<MyPoint>& points)
{
double sum = 0.0;
for(size_t i = 0; i < points.size() - 1; ++i)
sum += (points[i+1].x()-points[i].x()) * (points[i+1].y()+points[i].y());
return sum > 0.0;
}
Однако в некоторых случаях это, похоже, имеет неправильный результат. Возьмем, к примеру, следующее кольцо:
LINESTRING(0 119,0 60,694 70,704 72,712 77,719 83,723 92,725 102,723 111,719 120,712 126,703 130)
Это в порядке против часовой стрелки, но функция возвращает true.
Спасибо!