public static ArrayList<Vertices> ConvexPartition(Vertices vertices, float sheer) {

    ArrayList<Point> compatList = new ArrayList<Point>(vertices.getVertices().size());

    for (Iterator<Vector2> iter = vertices.getVertices().iterator(); iter.hasNext(); ) {
      Vector2 vertex = (Vector2) iter.next();
      compatList.add(new Point(vertex.x, vertex.x));
    }
    System.out.println(compatList.size());

    Triangulator t = new Triangulator(compatList, sheer);

    ArrayList<Vertices> list = new ArrayList<Vertices>();

    for (Iterator<ArrayList<Point>> iter = t.Triangles.iterator(); iter.hasNext(); ) {
      ArrayList<Point> triangle = (ArrayList<Point>) iter.next();
      Vertices outTriangles = new Vertices(triangle.size());
      for (Iterator<Point> iter1 = triangle.iterator(); iter1.hasNext(); ) {
        Point outTriangle = (Point) iter1.next();
        outTriangles.getVertices().add(new Vector2(outTriangle.X, outTriangle.Y));
      }

      list.add(outTriangles);
    }

    return list;
  }
  /// <summary>
  /// Decompose the polygon into several smaller non-concave polygons.
  /// </summary>
  /// <param name="vertices">The polygon to decompose.</param>
  /// <param name="sheer">The sheer to use if you get bad results, try using a higher value.</param>
  /// <returns>A list of trapezoids</returns>
  public static ArrayList<Vertices> ConvexPartitionTrapezoid(Vertices vertices, float sheer) {
    ArrayList<Point> compatList = new ArrayList<Point>(vertices.getVertices().size());
    for (Iterator<Vector2> iter = vertices.getVertices().iterator(); iter.hasNext(); ) {
      Vector2 vertex = (Vector2) iter.next();
      compatList.add(new Point(vertex.x, vertex.y));
    }

    Triangulator t = new Triangulator(compatList, sheer);

    ArrayList<Vertices> list = new ArrayList<Vertices>();

    for (Iterator<Trapezoid> iter = t.Trapezoids.iterator(); iter.hasNext(); ) {
      Trapezoid trapezoid = (Trapezoid) iter.next();
      Vertices verts = new Vertices();

      ArrayList<Point> points = trapezoid.GetVertices();
      for (Iterator<Point> iter1 = points.iterator(); iter1.hasNext(); ) {
        Point point = (Point) iter1.next();
        verts.getVertices().add(new Vector2(point.X, point.Y));
      }

      list.add(verts);
    }

    return list;
  }