2010-01-19 69 views
0

使用Java 2D我已将几个贝塞尔曲线(CubicCurve2D)修补到一起以创建“blob”。我现在面临的问题是如何:在Java中创建复合形状2D

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

我注意到THST CubicCurve2D工具Shape这为确定“内部性”众多contains方法和Graphics2D能够填充通过fill(Shape)一个Shape(我相信使用ShapegetPathIterator的方法来做到这一点)。

鉴于此,我希望我可以创建一个复合Shape,其中我的getPathIterator(AffineTransform)方法将简单地将底层PathIterator连接在一起。但是,一旦我的形状包含多个CubicCurve2D,就会产生一个NoSuchElementException。即使我设法做到这一点,我不相信它会按预期工作,因为CubicCurve2D总是填充在凸面上,而我的“斑点”是由凹凸曲线组成的。 “包含”问题更加困难,因为一个点可以合理地位于团块内,但不在任何单独的曲线内。

  • 我是否以正确的方式处理这个问题(想实现Shape?)还是有一种习惯的方法可以做到这一点,我不知道的?我会认为合成几何形状的问题会相当普遍。
  • 有没有人有关于如何解决这个问题的建议?

在此先感谢。

回答

3

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

+0

酷 - 谢谢皮埃尔!我会检查出来的。 – Adamski

+0

皮埃尔 - 非常感谢;这工作完美。 – Adamski

1

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

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

也很容易从路径中得到一个形状,并填充它,改造它等。