5
$\begingroup$

I have a four points in plane and need to test (based on point coordinates) whether they are able to form a convex quadrilateral:

convex quadrilateral

Of course, the test should avoid configurations like these:

concave quadrilateral 1

concave quadrilateral 2

Given the diagonals, I can check whether the quadrilateral is convex (simply checking whether the intersection of diagonals is between both ends of both diagonals).

The real problem is how to label the four points and filter out all concave and degenerate configurations (like, for example: $A=B$).

If the labeling is possible (convex case found), the four points should be labeled such that $AC$ and $BD$ are diagonals of a convex quadrialteral.

I wonder if there is an elegant solution (rather than testing every possible permutation of $A, B, C$ and $D$).

4 Answers 4

1

You want to know whether all four points are vertices of their convex hull. So find the convex hull using say Jarvis's march and check whether it has four vertices. You'll have to decide what to do when three points are collinear.

  • 0
    Thanks. In my original probl$e$m, I hav$e$ a transform that maps 4-points to another 4-points (i.e. planar homography that maps e.g. perspectively distorted view to an undistored one). I found one implementation, where they check whether any three points are colinear. However, what if the points form a deltoid? Then no three points are colinear and still the quadrilateral is concave.2012-04-10
1

If no points are coincident and only one angle between the vertices rays is greater than 180, then it is concave. Concave quadrilaterals can never form a bow tie. If all the angles between vertices rays are less than 90 degrees, then you have a bow tie. To order the points of a convex quadrilateral, average the vertices to find a median point. Draw a ray from the median point to each vertices. Calculate the angle of each median ray, and sort the vertices by their ray angles. Max to min sorting gives a clockwise quadrilateral, while min to max gives a counter clockwise quadrilateral.

  • 0
    _"If all the angles between vertices rays are less than 90 degrees, then you have a bow tie"_ -- you can make bow tie using two angles of 90 degrees and 2 angles < 90.2017-05-03
0

Maybe a simpler way to solve this problem would be to write down the four vectors which describe the sides of the polygon, and calculate at each vertex the angle between these vectors. If this angle is ever obtuse, then you don't have a convex polygon. This procedure would only require going through 4 calculations.

  • 0
    Oh, I see. That seems as if it would be a difficult algorithm to implement -- any three noncollinear points taken in some order form one angle with measure less than $180^\circ$ and another with measure greater than $180^\circ$. If you don't already know where the polygon is, how can you tell which one of those angles to use?2012-04-11