nom*_*ant 7 java methods polygon
在java中工作,我想简化我正在使用的绘图功能(多边形创建器).通常,在创建多边形时,执行以下操作:
Polygon mypoly = new Polygon();
mypoly.addPoint(x1, y1);
mypoly.addPoint(x2, y2);
mypoly.addPoint(x3, y3);
Draw.fillPolygon(g, mypoly, Color.blue);
Run Code Online (Sandbox Code Playgroud)
我想使用图像映射器自动给我坐标,所以我可以将它们复制粘贴到我自己的函数中.
myCommand(x1, y1, x2, y2, x3, y3);
Run Code Online (Sandbox Code Playgroud)
其中每个都将进入顶部的polygon命令.我面临的问题是,当mypoly被创建时,它如何知道要添加多少点以及放置它们的位置?
我试图在myCommand添加参数时自动添加点,并且每个点与原始多边形创建方法的x,y相对应.
听起来你需要使用构建器模式.在伪代码中:
PolygonBuilder pb = new PolygonBuilder();
pb.addPoint(1,1);
pb.addPoint(1,2);
// etc...
Polygon p = pb.newPolygon();
Run Code Online (Sandbox Code Playgroud)
所以我们的想法是为构建器提供一组点,它会生成适当的多边形.建筑商通常设计有流畅的界面.请注意,构建器可以像工厂一样工作,并返回适当的子类Polygon(方形,三角形,五边形等,如果您愿意的话).
请注意,您可以使用Java varargs机制提供一个采用可变数量参数的方法.例如
public void addPoints(Integer... args) {
// and iterate here
}
Run Code Online (Sandbox Code Playgroud)
您可能希望创建一个Point对象以一起定义x/y坐标.否则上面的内容必须检查偶数个参数,并且这些参数不会绑在一起.
您可以使用varargs并使用获取xs和ys数组的构造函数动态创建多边形
(代码未经测试)
public Polygon createPolygon(int... points) {
if (0 != points.length % 2) {
throw new IllegalArgumentException("Must have even number of points");
}
int numOfPoints = points.length / 2;
int xs = new int[numOfPoints];
int ys = new int[numOfPoints];
for (int i=0; i < numOfPoints;i++) {
xs[i] = points[i*2];
yx[i] = points[i*2 + 1];
}
return new Polygon(xs, ys, numOfPOints);
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用任意数量的点调用该方法
Polygon p = createPolygon(x1,y1,x2,y2,x3,y3);