Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to order vertices in a non-convex polygon (how to find one of many solutions)

I have the same problem as here: how to order vertices in a simple, non-convex polygon but there is no solutions I can use.

I have coordinates of points and need to find some polygon. Does not matter that there is more solutions for one list of dots. I need some algorithm to find one of them. Does not matter which one. I really don't know how to solve this.

(I have stored coordinates in array and I want to use some algorithm in Javascript)

Thanks a lot.

like image 877
1daemon1 Avatar asked Oct 31 '13 17:10

1daemon1


Video Answer


1 Answers

First, find the center of the bounding box that contains all of your vertices. We'll call this point C.

Sort your list of vertices based on each point's angle with respect to C. You can use atan2(point.y - C.y, point.x - C.x) to find the angle. If two or more vertices have the same angle, the one closer to C should come first.

Then, draw your points in the order they appear in the list. You will end up with a starburst pattern that is non-intersecting and probably non-convex. Example:

100 points randomly placed on a 400x400 pixel square

like image 150
Kevin Avatar answered Oct 21 '22 20:10

Kevin