# How to Split a Concave Polygon Into Convex Polygons in Arcpy?

I'm looking for a tool or algorithm to detect concave polygons and split them into convex polygons. Like explained in the picture, the blue polygon is split into A and B polygons

I'm using Arcpy under Arcgis 10.1

-
Perhaps you could elaborate on why you are doing this? After all, (a) detection is easy: a concave polygon will have less area than its convex hull; and (b) any triangulation of a polygon automatically splits it into convex polygons, because all triangles are convex. This shows you have some flexibility in choosing among the many possible solutions. – whuber Oct 5 '12 at 12:42
This toolset will enable you to see what Bill is talking about resources.arcgis.com/gallery/file/geoprocessing/… convert the polygon to points then run the Delaunay option – Dan Patterson Oct 5 '12 at 14:02
There is an answer to this over on Stack Overflow: stackoverflow.com/a/6686842/1300519 The algorithms described shouldn't be too difficult to write using arcpy. – Snorfalorpagus Dec 23 '12 at 16:47
@snorf That appears to answer a slightly, but importantly, different question. The solution apparently involves a combination of "polygons" and "holes", which is not what is usually meant by "splitting". At the least, that answer needs further elaboration to be useful here. (BTW, your answer was changed to a comment because cross-references to other solutions elsewhere on the Web, without any additional explanation, are not considered answers here on SE.) – whuber Dec 23 '12 at 21:58
Judging from the comments here and no answers arising, my recommendation would be to edit your question to incorporate that feedback and consider offering a bounty. – PolyGeo Jul 25 '13 at 2:23

here are a few steps to identify the vertices from the concave parts :

with parcel: minimum bounding geometry (hull) -> parcelHull

with parcel: FeatureVerticesToPoint -> parcelPoints

with parcelHull : FeatureVerticesToPoint -> parcelHullPoints

with parcelPoint and parcelHullPoint : symmetrical Diff -> concavePoints

based on those points, you can either draw the bissectrice to cut your polygon (bearing distance to line), select the edges of the Voronoï triangle that intersect your point but are not sharing a segment with your parcel boundary (select by location after splitting triangle lines at vertices), select the vertex on the opposite site and make a line (points to line), select the closest point on the opposite edge and make a line (points to line)...

At the end, use your preferred lines and the original parcels with "feature to polygon" to split the polygons.

-