代码之家  ›  专栏  ›  技术社区  ›  Adamski

在Java 2D中创建复合形状

  •  0
  • Adamski  · 技术社区  · 15 年前

    使用Java 2D,我修补了几个贝塞尔曲线。 CubicCurve2D )一起创造一个“斑点”。我现在面临的问题是如何:

    1. 有效地用给定的颜色填充斑点。
    2. 有效地确定给定点是否位于blob中。

    我注意到了 立方体2D 器具 Shape 它提供了许多 contains 确定“内在性”的方法 Graphics2D 可以填充 形状 通过 fill(Shape) (我相信这是有用的 形状 getPathIterator 方法)。

    考虑到这一点,我希望我能创造一个复合材料 形状 由此我 getPathIterator(AffineTransform) 方法将简单地链接基础 PathIterator 在一起。然而,这产生了 NoSuchElementException 一旦我的形状包含多个 立方体2D . 即使我能做到这一点,我也不相信它会像预期的那样工作,因为 立方体2D 总是填充在凸面上,而我的“斑点”是由凹凸曲线组成的。“包含”问题更加困难,因为一个点可以合法地位于blob中,但不在任何单个曲线中。

    • 我是否以正确的方式处理这个问题(尝试实现 形状 ?)还是有一种我不知道的惯用方法?我本以为合成几何图形的问题是相当普遍的。
    • 有人对如何解决这个问题有什么建议吗?

    事先谢谢。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Pierre    15 年前

    我不确定我理解你的问题,但是 复合形状 可以用类创建 java/awt/geom/Area .

        2
  •  1
  •   JiroDan    15 年前

    寻找合适的解决方案是解决这一问题的正确方法。如果你有一组曲线试图组合成一个形状,我建议你使用一个通用路径。只需根据需要添加曲线或直线段。查看接口以查看各种附加方法。还请注意,可以通过将最后一个点连接到起点来“完成”形状。

    一旦路径关闭,可以使用许多不同版本的contains(),请花时间阅读它们的每个描述,因为在速度和准确性方面存在权衡,这取决于您的应用程序。

    而且很容易从路径中获得形状,并填充它、变换它等等。