How do you polar sort?

Revision en11, by Alpha_Q, 2020-01-05 00:33:03

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.

Update: One of the previous entries were wrong. I like the following one which hopefully works.

inline bool up (point p) {
  return p.y > 0 or (p.y == 0 and p.x >= 0);
}

sort(v.begin(), v.end(), [] (point a, point b) {
  return up(a) == up(b) ? a.x * b.y > a.y * b.x : up(a) < up(b);
});
Tags geometry, godblessamerica

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en11 English Alpha_Q 2020-01-05 00:33:03 62
en10 English Alpha_Q 2020-01-05 00:21:53 237 Reverted to en7
en9 English Alpha_Q 2020-01-05 00:18:40 37 Tiny change: '});\n~~~~~' -> '});\n~~~~~\n\nReference: [submission:68213997].'
en8 English Alpha_Q 2020-01-05 00:16:42 200
en7 English Alpha_Q 2020-01-04 23:59:16 539 Tiny change: ' too slow. \n\n**Upda' -> ' too slow.\n\n**Upda'
en6 English Alpha_Q 2020-01-04 23:27:29 8
en5 English Alpha_Q 2020-01-04 23:25:59 41
en4 English Alpha_Q 2020-01-04 23:23:45 13 Tiny change: 'g version (way longer) seems to ' -> 'g version seems to '
en3 English Alpha_Q 2020-01-04 23:22:23 291
en2 English Alpha_Q 2020-01-04 23:00:16 504 Tiny change: '});\n~~~~~' -> '});\n~~~~~\n'
en1 English Alpha_Q 2020-01-04 21:38:47 467 Initial revision (published)