2009-12-08 29 views
3

我正在使用java2d绘制一个简单的图形,此刻我已经通过调用每个对象/形状的包含(MousePoint)来实现挑选,此工作可以线性缩放。在java中挑选2d

在java2d中选择是否有更高效的方法?

回答

4

是的,虽然完整答案对于这个空间来说太长了。

首先,除非你有很多节点,然后直线将最有可能被罚款,你不应该改变任何东西,除非性能已经看到受苦。

其次,你通常想要应用某种分级分解,例如quadtree。这是一种使用更多内存的方式(在搜索期间预先分配更多时间),以消除所谓“宽泛阶段”中的项目。在网上的一些勤勉将有助于克里斯特埃里克森的书“Real-Time Collision Detection”。

+0

这就是我想的方向,但这需要我自己来实现。也许最好使用java3d并使用已经实现的scenegraph和picking。 – stimpie 2009-12-08 15:43:52

+0

+1“用于需要时优化”。 – 2009-12-08 15:48:30

1

只要你只选择区域形状(矩形,圆形),它应该使用contains()方法。如果你有重叠的形状,并且你指向一个形状实际重叠的地方,那么只有一个缺陷。但是,这是一个关于是否要选择所有形状的问题,即顶部的形状或您在收藏中找到的第一个形状。

如果要选择Line2D类型形状,contains()方法将不起作用。它们没有区域,所以contains()方法总是返回false。但已经有一个solution on SO for this problem