0

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

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

我注意到 thstCubicCurve2D实现Shape了它提供了许多contains用于确定“内部”的方法,并且Graphics2D能够Shape通过fill(Shape)(我相信使用ShapegetPathIterator方法来做到这一点)填充 a。

鉴于此,我希望我可以创建一个组合Shape,从而我的getPathIterator(AffineTransform)方法将简单地将底层PathIterators 链接在一起。但是,NoSuchElementException一旦我的形状包含多个CubicCurve2D. 即使我确实设法实现了这一点,我也不相信它会按预期工作,因为 aCubicCurve2D总是在凸面填充,而我的“blob”由凹凸曲线组成。“包含”问题更加困难,因为一个点可以合法地位于 blob 内,但不能位于任何单独的曲线内。

  • 我是以正确的方式解决这个问题(试图实现Shape?)还是有一种我不知道的惯用方式来做到这一点?我原以为合成几何形状的问题会相当普遍。
  • 有人对如何解决这个问题有任何建议吗?

提前致谢。

4

2 回答 2

3

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

于 2010-01-19T09:38:43.810 回答
1

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

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

此外,很容易从路径中获取形状,并对其进行填充、变换等。

于 2010-06-21T16:12:36.773 回答