2009-12-08 2 views
3

Я использую java2d для рисования простого графика на момент, когда я реализовал сбор по вызову, содержит (MousePoint) для каждого объекта/формы, это работает, но масштабируется линейно.Выбор в java 2d

Есть ли более эффективный метод для выбора в java2d?

ответ

4

Да, хотя полный ответ будет слишком длинным для этого пространства.

Прежде всего, если у Вас нет много узлов, то линейная, скорее всего, будет хорошо, и вы не должны ничего , если производительность не видел уже страдать изменить.

Во-вторых, вы хотите, в общем, применить какое-то иерархическое разложение, например quadtree. Это способ использовать больше памяти (и больше времени спереди, амортизируется во время поиска), чтобы исключить элементы из рассмотрения в так называемой «широкой фазе». Некоторое усердие в Интернете поможет, как и книга «Real-Time Collision Detection», автор Christer Ericson.

+0

Это направление, о котором я думал, но это требует, чтобы я сам его реализовал. Может быть, лучше использовать java3d и использовать сценарграф и сбор уже реализованных. – stimpie

+0

+1 для «оптимизируйте, когда вам нужно». –

1

До тех пор, пока вы выбираете только прямоугольные формы (прямоугольники, круги), он должен работать с методом contains(). Есть только одна ложь на всякий случай, если у вас есть перекрывающиеся фигуры, и вы указываете на место, где формы фактически перекрываются. Но это вопрос требования, хотите ли вы выбрать все фигуры, одну сверху или первую фигуру, которую вы найдете в своей коллекции.

Метод contains() не будет работать, если вы хотите выбрать формы типа Line2D. У них нет области, поэтому метод contains() всегда возвращает false. Но уже есть solution on SO for this problem.

Смежные вопросы