Silverlight Polygon - щелкните внутри? - PullRequest
2 голосов
/ 31 августа 2009

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

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

Я бы хотел сказать

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

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

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

Ответы [ 2 ]

2 голосов
/ 31 августа 2009

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

1 голос
/ 31 августа 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...