pp = [(-0.500000050000005, -0.5), (-0.499999950000005, 0.5), (
    -0.500000100000005, -1.0), (-0.49999990000000505, 1.0), (
    0.500000050000005, -0.5), (-1.0000000250000025, -0.5), (
    1.0000000250000025, -0.5), (0.499999950000005, 0.5), (
    -0.9999999750000024, 0.5), (0.9999999750000024, 0.5), (
    0.500000100000005, -1.0), (0.49999990000000505, 1.0), (-1.0, 0.0), (
    -0.0, -1.0), (0.0, 1.0), (1.0, 0.0), (-0.500000050000005, -0.5)]
cent = sum([p[0] for p in pp]) / len(pp), sum([p[1] for p in pp]) / len(pp)
pp.sort(key=lambda p: math.atan2(p[1] - cent[1], p[0] - cent[0]))
pylab.scatter([p[0] for p in pp], [p[1] for p in pp])
pylab.gca().add_patch(patches.Polygon(pp, closed=False, fill=False))
pylab.grid()
pylab.show()
упорядочивание перетасованных точек, которые можно соединить для формирования многоугольника (в python)