2009-12-08 30 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