Как узнать, пересекаются ли две Полилинии - PullRequest
4 голосов
/ 12 августа 2011

У меня проблема с обнаружением, пересекаются ли две PolyLines.

Ну, главная цель - сравнить последние X и Y с другой PolyLine и выяснить, не пересекается ли она с ней.

В данных имеются пробелы из-за перемещения X и Y, поэтому большую часть времени я не могу найти X и Y в другой PolyLine.

Я думаю, что мне нужно сравнить визуальное дерево или что-то, а не сами данные, но я не знаю, как это сделать.

<Canvas x:Name="LayoutRoot" Background="Black" Margin="2">
    <Polyline x:Name="player3line" Stroke="GreenYellow" StrokeThickness="4" Points="146,106 141,106 136,105 131,105 126,105 121,106 116,108 112,110 108,113 104,115 100,118 96,120 92,123 88,126 84,129 80,132 77,136 74,140 72,144 69,148 67,152 64,156 " />
    <Polyline x:Name="player4line" Stroke="Cyan" StrokeThickness="4" Points="85,113 89,116 93,119 97,121 102,123 107,124" />
</Canvas>

Должен быть простой способ проверить, пересекаются ли эти два?

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

Любое тестирование столкновений должно проводиться на данных, так как в Silverlight нет известных магических аппаратных / программных тестов на столкновения.

В случае двух полилиний необходимо проверить каждый сегментлиния против каждого сегмента другой линии (или упрощенная версия одного или обоих для начинающих).

Вы можете сначала проверить на bounds-rectangle столкновение (мин. и макс. x, y положенийкаждый многоугольник образует ограничивающий прямоугольник), и если они вообще перекрываются, вам необходимо проверить каждый отдельный отрезок линии на предмет столкновения.

Нет ярлыков, о которых мне известно, для такого рода тестирования столкновений.Всего несколько трюков для ускорения проверки.

Эта ссылка показывает пример высокого уровня, но есть и другие решения, ориентированные на игру.

1 голос
/ 13 августа 2011

Я решил, что должен искать все координаты вокруг моей точки, поскольку толщина обводки равна 4.

Так что я решил, что мне нужно проверить от Х-2 до Х + 2 и от Y-2 до Y +2.

Итак, я сделал это, и пока он работает потрясающе, я признаю, что он не идеален, но он прост, и на данный момент я не вижу никаких пиков ЦП с этим методом:

...