Как найти внутреннюю границу фигуры в виде набора точек? - PullRequest
0 голосов
/ 20 сентября 2019

Мне нужно получить внутреннюю границу формы.Ранее я нашел ближайшую точку к центру фигуры в случае квадратной или круговой формы, но как я могу это сделать в случае М-формы.

Что у меня есть (мне нужны отмеченные точки на скриншоте №2):


Canvas


enter image description here


Любые алгоритмы, шагичтобы найти эти точки?

UPD: теперь у меня есть вектор направления сегментов, например (1, 0) или (0,5, 0,5)

1 Ответ

0 голосов
/ 25 сентября 2019

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

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

Я полагаю, что с помощью нескольких простых критериев взвешивания, таких какэто, вы быстро получите некоторые ощутимые результаты.

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

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