2009-08-31 3 views
2

У меня есть Polygon (Hex для настольной игры) в Silverlight, что-то вроде;Silverlight Polygon - нажмите внутри?

public class GridHex : IGridShape 
{ 
    ..... 
    public IList<Point> Points { get; protected set; } 
    public bool Intersects(Point point) { ... } 
} 

Я хотел бы быть в состоянии сказать

if(myHex.Intersects(clickedPoint)) { ... } 

Однако я не уверен в какой алгоритм использовать в рамках метода пересекающего - в настоящее время я использую внутренний «ограничивающий прямоугольник» внутри каждого Шестиугольник, чтобы определить, находится ли в нем точка, но должен ли быть алгоритм, чтобы понять это? Я знаю координаты для 6 пунктов каждого шестиугольника.

Я думал, что могу создать Silverlight Polygon и провести какое-то тестирование на удар? Конечно, это было бы довольно интенсивно с памятью (я бы повторил большое количество гексов, чтобы увидеть, какой Хек щелчок мыши попал внутрь ...), поэтому было бы лучше использовать математическую формулу для разработки, если точка находится внутри a Hex ....

ответ

2

This page прекрасно объясняет алгоритм определения, находится ли точка внутри многоугольника.

1

Вы изучили встроенную поддержку, используя FindElementsInHostCoordinates? Я ожидал бы, что это будет быстрее, поскольку он, вероятно, использует неуправляемый код.

Вот sample, который работает с векторными формами, поддерживаемых в Silverlight 2.

И вот an updated sample, которая использует WriteableBitmap расширить поддержку хитовой тестировании на растровые изображения, а также.

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