Minkowski { public static IGeometry sumOfMinkowskiFromCenter(IGeometry polygon1, IGeometry polygon2){ return sumOfMinkowski(polygon1, polygon2, polygon2.centroid()); }  static IGeometry convexSumOfMinkowski(IGeometry polygon1, IGeometry polygon2); static IGeometry convexSumOfMinkowski(IGeometry polygon, IGeometry structure, IDirectPosition ref); static boolean isConvex(IGeometry polygone); static IGeometry sumOfMinkowski(IGeometry polygon1, IGeometry polygon2); @SuppressWarnings("rawtypes") static IGeometry sumOfMinkowski(IGeometry polygon1, IGeometry polygon2, IDirectPosition ref); static IGeometry sumOfMinkowskiFromCenter(IGeometry polygon1, IGeometry polygon2); static IGeometry inverseSumOfMinkowskiFromCenter(IGeometry polygon1, IGeometry polygon2); static IGeometry substractionOfMinkowskiFromCenter(IGeometry polygon1, IGeometry polygon2);  }
@Test public void testSomme(){ DirectPositionList controlPts = new DirectPositionList(); controlPts.add(new DirectPosition(17.833333333333332,12.833333333333332)); controlPts.add(new DirectPosition(17.833333333333332,10.833333333333332)); controlPts.add(new DirectPosition(15.833333333333332,8.833333333333332)); controlPts.add(new DirectPosition(13.833333333333332,8.833333333333332)); controlPts.add(new DirectPosition(10.833333333333332,8.833333333333332)); controlPts.add(new DirectPosition(8.833333333333332,8.833333333333332)); controlPts.add(new DirectPosition(8.833333333333332,13.833333333333332)); controlPts.add(new DirectPosition(9.833333333333332,16.833333333333332)); controlPts.add(new DirectPosition(14.833333333333332,16.833333333333332)); controlPts.add(new DirectPosition(15.833333333333332,15.833333333333332)); controlPts.add(new DirectPosition(15.833333333333332,14.083333333333332)); controlPts.add(new DirectPosition(16.833333333333332,13.833333333333332)); controlPts.add(new DirectPosition(17.833333333333332,12.833333333333332)); GM_LineString linesControl = new GM_LineString(controlPts); GM_Polygon control = new GM_Polygon(linesControl); DirectPositionList points = new DirectPositionList(); points.add(new DirectPosition(10,10)); points.add(new DirectPosition(15,10)); points.add(new DirectPosition(17,12)); points.add(new DirectPosition(13,13)); points.add(new DirectPosition(15,15)); points.add(new DirectPosition(10,15)); points.add(new DirectPosition(10,10)); GM_LineString lines = new GM_LineString(points); GM_Polygon p1 = new GM_Polygon(lines); DirectPositionList points2 = new DirectPositionList(); points2.add(new DirectPosition(5,5)); points2.add(new DirectPosition(7,5)); points2.add(new DirectPosition(7,7)); points2.add(new DirectPosition(6,8)); points2.add(new DirectPosition(5,5)); GM_LineString lines2 = new GM_LineString(points2); GM_Polygon p2 = new GM_Polygon(lines2); GM_Polygon somme = (GM_Polygon) Minkowski.sumOfMinkowskiFromCenter(p1, p2); for (int i=0; i<somme.coord().size(); i++){ System.out.println(somme.coord().get(i).getX()+","+somme.coord().get(i).getY()); } double ratio = somme.intersection(control).area()/somme.union(control).area(); Assert.assertEquals(ratio, 1.0, Math.pow(10, -6)); }