Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

This question already has an answer here:

I have a set of points

Pts[a_,b_,c_]:={{a, b}, {b, a}, {c, a}, {a, c}, {b, c}, {c, b}}

which define a convex polygon and I would like to find its area. There is a simple method but it requires listing the points in counterclockwise order, but I don't know (in general) how to put them in this order. (Leaving them in their given order produces a self-intersecting polygon with a too-small area.) What can I do here?

I could imagine a sorting routine of some kind (find the middle and order by $\theta$? but probably there could be issues) or maybe there is some built-in method. In any case I certainly don't want to iterate over possible orders, since those grow very quickly and clearly it isn't the right thing to do.

An answer addressing my special case is sufficient, but I would be interested in a general method that works with an arbitrary set of points defining a convex polygon.

share|improve this question

marked as duplicate by Kuba, Yves Klett, ciao, m_goldberg, Oleksandr R. Apr 24 '14 at 9:22

This question was marked as an exact duplicate of an existing question.

answer and related – Kuba Mar 24 '14 at 20:23
@Kuba: I can't get ConvexHull to give sensible results. ConvexHull[{{4, 3}, {3, 4}, {2, 4}, {4, 2}, {3, 2}, {2, 3}}] gives {4, 1, 2, 3, 6, 5}. – Charles Mar 24 '14 at 20:33
This is the order. – Kuba Mar 24 '14 at 20:35
You can try using FindCurvePath to get your polygon points in order... no guarantees of it working for all input though (in fact, it might fail for anything other than small/toy problems). BTW, this is a duplicate: – R. M. Mar 24 '14 at 20:37
If your polygon is known to be convex then ordering by angle relative to the mean of the vertices will also work. – Rahul Mar 24 '14 at 22:55

Ugly + undocumented solution:

make[pts_] := PolygonArea[With[{order = ConvexHull[pts]},
  Append[pts[[order]], pts[[order[[1]]]]]]]
share|improve this answer
Please add a Graphics of the Convex Hull calculated in this way for the example given by the OP in his comments pts={{4, 3}, {3, 4}, {2, 4}, {4, 2}, {3, 2}, {2, 3}} – Dr. belisarius Mar 25 '14 at 7:05

Not the answer you're looking for? Browse other questions tagged or ask your own question.