在Java 2D中创建复合Shape

时间:2010-01-19 09:34:28

标签: java algorithm graphics java-2d bezier

使用Java 2D我将几条Bezier曲线(CubicCurve2D)拼接在一起以创建“blob”。我现在面临的问题是如何:

  1. 使用给定的颜色有效填充blob。
  2. 有效地确定给定点是否位于blob内。
  3. 我注意到CubicCurve2D实施了Shape,它提供了许多用于确定“内部性”的contains种方法,并且Graphics2D能够通过“{1}}填充Shape fill(Shape)(我相信使用Shape的{​​{1}}方法来执行此操作。

    鉴于此,我希望我可以创建一个复合getPathIterator,我的Shape方法只会将基础getPathIterator(AffineTransform)链接在一起。但是,一旦我的形状包含多个PathIterator,就会产生NoSuchElementException。即使我设法实现这一点,我也不相信它会按预期工作,因为CubicCurve2D总是填充在凸面上,而我的“blob”由凹凸曲线组成。 “包含”问题甚至更难,因为一个点可以合理地位于blob内,但不在任何单个曲线内。

    • 我是否以正确的方式处理此问题(尝试实施CubicCurve2D?)或者是否有一种习惯性的方式来做到这一点,我不知道?我原以为合成几何形状的问题会相当普遍。
    • 有没有人对如何解决这个问题有任何建议?

    提前致谢。

2 个答案:

答案 0 :(得分:3)

我不确定我理解你的问题,但复合形状可以使用班级java/awt/geom/Area创建。

答案 1 :(得分:1)

寻找解决方案的形状是正确的方法。如果你有一组曲线,你试图组装成一个形状,我建议你使用一个GeneralPath。只需根据需要添加曲线或直线段。查看界面以查看各种追加方法。另请注意,您可以通过将最后一个点连接到起点来“完成”形状。

一旦路径关闭,可以使用许多不同版本的contains(),请花时间阅读每个描述,因为在速度和准确性方面需要权衡取决于在你的申请上。

也很容易从路径中获取形状,填充,转换等等。