# Is there a built-in function that determines whether X/Y coordinates give valid polygon?

8 views (last 30 days)

Show older comments

If I have a vector of X-coordinates and a vector of Y-coordinates, is there a function that determines whether a valid polygon is created based on the order of the X/Y coords (i.e., lines connecting points do not criss-cross). I envision it would work something like this:

Valid polygon would be:

>> xy = [0,0; 1,0; 1,1; 0,1; 0,0];

>> ispoly(xy)

ans =

1

Not a valid polygon:

>> xy = [0,0; 1,0; 0,1; 1,1; 0,0];

>> ispoly(xy)

ans =

0

If nothing exists... no worries I'll sit down and work out my own function.

##### 0 Comments

### Answers (3)

Image Analyst
on 19 Jul 2012

Star Strider
on 18 Jul 2012

I'm not certain this does what you want, but experimenting with ‘convhull’ might provide a solution:

xy1 = [0,0; 1,0; 1,1; 0,1; 0,0];

xy2 = [0,0; 1,0; 0,1; 1,1; 0,0];

[K1,V1] = convhull(xy1(:,1), xy1(:,2));

[K2,V2] = convhull(xy2(:,1), xy2(:,2));

dK1 = diff(K1);

dK2 = diff(K2);

The list in ‘K1’ is in order, the list in ‘K2’ is not, so ‘dK1’ has only one (-)ve element while ‘dK2’ has two. You'll likely have to write your own ‘ispoly’ function, but ‘convhull’ may make that easier.

### See Also

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!