Как отслеживать тысячи нарисованных фигур в Windows C ++ CLR - PullRequest
1 голос
/ 11 ноября 2010

Я хочу, чтобы на панели были потенциально тысячи нарисованных фигур, и я мог бы их идентифицировать, когда наведу курсор мыши или нажму на них.Каков наилучший способ сделать это?

Я предполагаю, что у меня должны быть некоторые области формы в таблице.И есть какой-то умный способ поиска совпадений, когда я наведусь на страницу.Кажется вычислительно интенсивным.Существуют ли методы, которые могут помочь?

Ответы [ 2 ]

3 голосов
/ 11 ноября 2010

Когда вы рисуете на панель, также рисуйте фигуры в растровое изображение, которое не отображается, и используйте идентификатор формы в качестве цвета.Когда вам нужно найти форму, просто проверьте пиксель в соответствующих координатах в вашем растровом изображении.Убедитесь, что вы отключили любое сглаживание линий или сглаживание при рисовании растрового изображения!

0 голосов
/ 11 ноября 2010

То, что вы хотите, это что-то вроде Quad Tree или Binary Space Partitioning (BSP).

Quad Tree довольно прост. BSP безумно быстрые, но не обрабатывают движущиеся фигуры и их сложно построить.

A Пространственный хэш действительно легко кодируется и создается самостоятельно во время выполнения. Его основным недостатком является то, что время поиска в худшем случае вырождается O(n) (если большинство фигур в горизонтальной или вертикальной линии).

Box2D использует собственную разновидность разбиение пространства . Я не совсем уверен, что является основным алгоритмом и является ли он новым или производным. Но Эрин написала широкофазу Box2D , чтобы ее можно было использовать вне физического движка. Код лицензирован zlib, поэтому вы можете просто скопировать несколько необходимых вам файлов.

...