gpt4 book ai didi

java.awt.geom.Area 减去后返回多个部分?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:52:39 27 4
gpt4 key购买 nike

我想使用 Java 的 Area 类 (java.awt.geom.Area) 对各种多边形进行减法和求交操作。

在许多这些情况下,减法操作可能会将源区域分成两部分。在这些情况下,我需要返回两个 Area 对象,一个对象对应于减法操作创建的每个结果连续部分。

在通读了有关 Area 类的 JavaDocs 之后,我似乎还没有找到任何方法来返回 Area 的连续部分。事实上,我什至不确定 Area 是如何处理这种情况的。

我如何获得所有由 Area 的减法或交集方法创建的连续 Area?

谢谢,-科迪

最佳答案

正如我在评论中所说。遍历轮廓路径,获取绕组并确定段起点。当您点击 PathIterator.SEG_MOVETO 时,构造一个 java.awt.Path2D.Float 并向其添加点,直到您点击 PathIterator.SEG_CLOSE

我给大家举个例子

   public static List<Area> getAreas(Area area) {
PathIterator iter = area.getPathIterator(null);
List<Area> areas = new ArrayList<Area>();
Path2D.Float poly = new Path2D.Float();
Point2D.Float start = null;
while(!iter.isDone()) {
float point[] = new float[2]; //x,y
int type = iter.currentSegment(point);
if(type == PathIterator.SEG_MOVETO) {
poly.moveTo(point[0], point[1]);
} else if(type == PathIterator.SEG_CLOSE) {
areas.add(new Area(poly));
poly.reset();
} else {
poly.lineTo(point[0],point[1]);
}
iter.next();
}
return areas;
}

public static void main(String[] args) {
Area a = new Area(new Polygon(new int[]{0,1,2}, new int[]{2,0,2}, 3));
Area b = new Area(new Polygon(new int[]{0,2,4}, new int[]{0,2,0}, 3));
b.subtract(a);

for(Area ar : getAreas(b)) {
PathIterator it = ar.getPathIterator(null);
System.out.println("New Area");
while(!it.isDone()) {
float vals[] = new float[2];
int type = it.currentSegment(vals);
System.out.print(" " + "[" + vals[0] + "," + vals[1] +"]");
it.next();
}
System.out.println();
}
}

关于java.awt.geom.Area 减去后返回多个部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12421420/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com