return shapeVerts;
//otherwise we can find our mutually visible vertex to split the polygon
Coordinate I = rightMostHoleVertex.getPosition();
GVector i=new GVector(new double[] {I.x,I.y});
i.add(new GVector(new double[] {closestPoint.floatValue(),0.0}));
Vertex P = (closestSegment.A.getPosition().x > closestSegment.B.getPosition().x)
? closestSegment.A
: closestSegment.B;
//construct triangle MIP
Triangle mip = new Triangle(rightMostHoleVertex, new Vertex(I, 1), P);
//see if any of the reflex vertices lie inside of the MIP triangle
ArrayList interiorReflexVertices = new ArrayList();
for (int count=0;count<reflexVertices.size();count++) {
Vertex v=(Vertex)reflexVertices.get(count);
if (mip.ContainsPoint(v))
interiorReflexVertices.add(v);
}
//if there are any interior reflex vertices, find the one that, when connected
//to our rightMostHoleVertex, forms the line closest to Vector2.UnitX
if (interiorReflexVertices.size() > 0)
{
float closestDot = -1f;
for (int count=0;count<interiorReflexVertices.size();count++)
{
Vertex v=(Vertex)interiorReflexVertices.get(count);
GVector n=new GVector(new double[] {v.getPosition().x,v.getPosition().y});
n.sub(new GVector(new double[] {rightMostHoleVertex.getPosition().x,rightMostHoleVertex.getPosition().y}));
n.normalize();
GVector m=new GVector(new double[] {1.0,0.0});
float dot=(float)m.dot(n);
//if this line is the closest we've found
if (dot > closestDot)
{