Say yo want a set of points sorted in some counterclockwise order. What is the best (fast, precise, short) way to do it? The atan2l
function is precise and short but way too slow. I do it like this (tested on 68208420) [update: it doesn't work on all inputs].
sort(v.begin(), v.end(), [] (point a, point b) {
bool x = a.y >= 0, y = b.y >= 0;
return x == y ? a.x * b.y > a.y * b.x : x < y;
});
Just wondering if there's something even shorter.
Update: the above code works only for set of points with no three collinear. The following version seems to work for all inputs.
int quad[][] = {{2, 1}, {3, 0}};
sort(v.begin(), v.end(), [] (point a, point b) {
int x = quad[a.x < 0][a.y < 0], y = quad[b.x < 0][b.y < 0];
return x == y ? a.x * b.y > a.y * b.x : x < y;
});