gpt4 book ai didi

java - 从 java.awt.geom.Area 转换为 java.awt.Polygon

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:51 28 4
gpt4 key购买 nike

我需要将 java.awt.geom.Areajava.awt.Shape 转换为 java.awt.Polygon。我所知道的是:isSingular = trueisPolygonal = true。所以我认为多边形应该能够描述相同的区域。

最佳答案

我不确定它是否值得转换,因为 Polygon 是旧的 Java 1.0 类,只能存储整数坐标,因此您可能会损失一些精度。无论如何,您可以从 Shape 中获取 PathIterator,并在迭代它时向多边形添加新点:

public static void main(String[] args) {
Area a = new Area(new Rectangle(1, 1, 5, 5));
PathIterator iterator = a.getPathIterator(null);
float[] floats = new float[6];
Polygon polygon = new Polygon();
while (!iterator.isDone()) {
int type = iterator.currentSegment(floats);
int x = (int) floats[0];
int y = (int) floats[1];
if(type != PathIterator.SEG_CLOSE) {
polygon.addPoint(x, y);
System.out.println("adding x = " + x + ", y = " + y);
}
iterator.next();
}
}

编辑 正如 Bill Lin 评论的那样,如果 PathIterator 描述了多个子路径(例如,在有孔的区域的情况下),此代码可能会给您一个错误的多边形。为了考虑到这一点,您还需要检查 PathIterator.MOVETO 段,并可能创建一个多边形列表。

为了确定哪些多边形是孔洞,您可以计算边界框 (Shape.getBounds2D()),并检查哪个边界框包含另一个边界框。请注意,getBounds2D API 说“不能保证返回的 Rectangle2D 是包围 Shape 的最小边界框,只是 Shape 完全位于指示的 Rectangle2D 内”,但根据我对多边形形状的经验,它将是最小的, 而且无论如何计算多边形的精确边界框是微不足道的(只需找到最小和最大的 x 和 y 坐标)。

关于java - 从 java.awt.geom.Area 转换为 java.awt.Polygon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31209541/

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