0
$\begingroup$

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.

$\endgroup$
5
  • 1
    $\begingroup$ answer and related $\endgroup$ Commented Mar 24, 2014 at 20:23
  • $\begingroup$ @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}. $\endgroup$ Commented Mar 24, 2014 at 20:33
  • $\begingroup$ This is the order. $\endgroup$ Commented Mar 24, 2014 at 20:35
  • $\begingroup$ 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: mathematica.stackexchange.com/q/9406/5 $\endgroup$ Commented Mar 24, 2014 at 20:37
  • 1
    $\begingroup$ If your polygon is known to be convex then ordering by angle relative to the mean of the vertices will also work. $\endgroup$ Commented Mar 24, 2014 at 22:55

1 Answer 1

0
$\begingroup$

Ugly + undocumented solution:

Graphics`Mesh`MeshInit[]; make[pts_] := PolygonArea[With[{order = ConvexHull[pts]}, Append[pts[[order]], pts[[order[[1]]]]]]] 
$\endgroup$
1
  • 2
    $\begingroup$ 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}} $\endgroup$ Commented Mar 25, 2014 at 7:05

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.