扩展@normalocity的想法,这似乎是一种可能的方法。
附录:供参考,此方法仅使用公共API,但其他变体也是可能的。
安慰:
MoveTo:[0.0、0.0、0.0、0.0、0.0、0.0]LineTo:[0.0、10.0、0.0、0.0、0.0、0.0]LineTo:[10.0、10.0、0.0、0.0、0.0、0.0]LineTo:[10.0、0.0、0.0、0.0、0.0、0.0]关闭:[10.0、0.0、0.0、0.0、0.0、0.0]MoveTo:[0.0、0.0、0.0、0.0、0.0、0.0]LineTo:[1.0、5.0、0.0、0.0、0.0、0.0]LineTo:[0.0、10.0、0.0、0.0、0.0、0.0]LineTo:[10.0、10.0、0.0、0.0、0.0、0.0]LineTo:[10.0、0.0、0.0、0.0、0.0、0.0]关闭:[10.0、0.0、0.0、0.0、0.0、0.0]
码:
import java.awt.Point;import java.awt.Polygon;import java.awt.geom.PathIterator;import java.util.Arrays;public class MyPoly extends Polygon { public static void main(String[] args) { final MyPoly square = new MyPoly(); square.addPoint(0, 0); square.addPoint(0, 10); square.addPoint(10, 10); square.addPoint(10, 0); System.out.println(square.toString()); MyPoly pentagon = square.insert(1, new Point(1, 5)); System.out.println(pentagon.toString()); } public MyPoly insert(int index, Point point) { MyPoly mp = new MyPoly(); PathIterator pi = this.getPathIterator(null); double[] coords = new double[6]; int i = 0; while (!pi.isDone()) { if (i == index) { mp.addPoint(point.x, point.y); } else { if (pi.currentSegment(coords) != PathIterator.SEG_CLOSE) { mp.addPoint((int) coords[0], (int) coords[1]); } pi.next(); } i++; } return mp; } @Override public String toString() { PathIterator pi = this.getPathIterator(null); double[] coords = new double[6]; StringBuilder sb = new StringBuilder(); while (!pi.isDone()) { int kind = pi.currentSegment(coords); switch (kind) { case PathIterator.SEG_MOVETO: sb.append("MoveTo: "); break; case PathIterator.SEG_LINETO: sb.append("LineTo: "); break; case PathIterator.SEG_CLOSE: sb.append("Close: "); break; default: throw new IllegalArgumentException("Bad path segment"); } sb.append(Arrays.toString(coords)); sb.append("n"); pi.next(); } return sb.toString(); }}


