fix20152
@fix20152
javascript developer

Как найти алгоритм по поиску внешних сторон?

Всем привет, есть проблема с алгоритмом поиска внешних сторон. Есть программа написанная на js на которой пользователи рисуют план здания, рисуют в 2D и потом преобразовуют в 3D, и нужно найти внешние стороны чтобы соответственно с внешней стороны рисовать кирпичный фасад,а с другой обои. У кого есть какие предложения по поиску сторон?5a1f1040e2e00110284307.png
  • Вопрос задан
  • 149 просмотров
Пригласить эксперта
Ответы на вопрос 3
adugin
@adugin
1) Любую плоскость можно описать вектором нормали к ней.
2) Если центр координат разместить внутри дома, то можно сравнить направление нормали и направление к центру.
Ответ написан
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Нужно реализовать алгоритм разбиения плоскости на области.
1) Представить стены в виде графа, где вершины - углы и пересечения стен, а ребра - самы стены.
2) Каждое ребро превратить в 2 ориентированных ребра в обе стороны. При этом надо для каждого ребра сохранить ссылку на обратное ребро.
3) В каждой вершине упорядочить все ребра по углу наклона (допустим, по часовой стрелке) и для каждого ребра хранить ссылку на следующее (зацикленно, т.е. для последнего ребра храним ссылку на первое).
4) Теперь будем выделять замкнутые области. Для этого возьмем любое необработанное пока ориентированное ребро. Потом будем от него переходить к следующему ребру в границе области. Для этого сначала получаем обратное к данному ребру. Потом переходим к следующему по углу наклона ребру, исходящему из той же вершины. Помечаем это ребро обработанным. Продалжаем, пока не вернемся к изначальному ребру (обязательно вернемся к нему). Фактически тут мы идем вдоль ребер и каждый раз в вершине максимально поворачиваем по часовой стрелке (или против, зависит от того, как сортировать ребра в вершинах).

Таким образом можно выделить все замкнутые области на картинке.

Теперь для каждого ребра мы знаем следующее в той же области. По каждой замкнутой области можно посчитать ее площадь со знаком (через векторные произведения двух соседних сторон). Для всех областей эта площадь будет одного знака, но для одной области она будет равна сумме всех осталных по модулю, но обратного знака. Эта область - это и есть внешние стены.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы