powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вопрос скорее по алгоритмизации...
10 сообщений из 10, страница 1 из 1
Вопрос скорее по алгоритмизации...
    #33766090
Sender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, уважаемые.
Есть интересная задачка:
Дано: Координаты вершин полигона (X1,Y1.....Xn,Yn)
Нужно изменить координаты вершин так, чтобы:
а) все углы между смежными рёбрами были 90 и 180 градусов
б) самое длинное ребро было параллельно его прототипу (предыдущему состоянию)
в) центроид полученного полигона совпадал с центроидом исходного полигона

Речь идёт о ГИС'овской задаче, редактируем неверно нарисованные дома.

У кого-нибудь есть идеи?

P.S. Ну и естественно все это программно
P.S2. Возможно придется делать группы углов, если например дом выглядит так:


___
/ _ \
/_/ \_\
...
Рейтинг: 0 / 0
Вопрос скорее по алгоритмизации...
    #33766757
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо у Вас не очень удачная постановка задачи. В Москве можно найти, например, многогранные дома, в которых реальный угол между реальными ребрами, например, 144 градуса (правильный десятиугольник).

С точки зрения неправильно нарисованных домов... сходу я бы сделал эвристику, опираясь на следующий набор критериев:

- пересечения граней
- острые углы
- отсутствие связи с ближайшей вершиной.
...
Рейтинг: 0 / 0
Вопрос скорее по алгоритмизации...
    #33766821
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще, как вариант, можно сделать библиотеку безмасштабных контуров и подбирать здания под имеющиеся контуры. Здания, которые не удается сопоставить уже известному контуру, проверяем руками и вносим в библиотеку контуров (или зданию ставим флаг "контур не проверять, оставить как есть").

Дополнительно подкину еще одно здание: Варшавка, 125.
Если память мне не изменяет, оно закругленное, но имеет всего четыре угла по 90 градусов (если не считать мелкие пристройки).
...
Рейтинг: 0 / 0
Вопрос скорее по алгоритмизации...
    #33766870
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerИмхо у Вас не очень удачная постановка задачи. В Москве можно найти, например, многогранные дома, в которых реальный угол между реальными ребрами, например, 144 градуса (правильный десятиугольник).
Мало того, в Москве можно найти дома у которых вообще нет углов - круглые.
...
Рейтинг: 0 / 0
Вопрос скорее по алгоритмизации...
    #33767066
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичМало того, в Москве можно найти дома у которых вообще нет углов - круглые.
Безусловно. Собственно, прямо напротив меня - здание, имеющее форму сектора (четверть круга). Но это отдельный вопрос, который если решен, то будет отдельно обрабатываться; я ограничился случаем, вроде как подходящим под постановку автора (здание - многоугольник).
...
Рейтинг: 0 / 0
Вопрос скорее по алгоритмизации...
    #33771425
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SenderЗдравствуйте, уважаемые.
Есть интересная задачка:
Дано: Координаты вершин полигона (X1,Y1.....Xn,Yn)
Нужно изменить координаты вершин так, чтобы:
а) все углы между смежными рёбрами были 90 и 180 градусов
б) самое длинное ребро было параллельно его прототипу (предыдущему состоянию)
в) центроид полученного полигона совпадал с центроидом исходного полигона

Речь идёт о ГИС'овской задаче, редактируем неверно нарисованные дома.

У кого-нибудь есть идеи?

P.S. Ну и естественно все это программно
P.S2. Возможно придется делать группы углов, если например дом выглядит так:


___
/ _ \
/_/ \_\

И чего тут интересного?

1) Находим самое длинное ребро (№1) и не трогаем его совсем.
2) Берем следующее (№2) (по часовой или против - это дело вкуса) доворачиваем на нужный угол вокруг конца, совпадающего с концом (№1).
3) Берем следующее (№3) - перемещаем соотв. конец №3 до совпадения с новым положением конца №2 и доворачиваем на нужный угол вокруг конца №2
4) Повторяем 3) пока есть еще ребра.
5) Вычисляем "центроид" для нового и старого полигона.
6) перемещаем новый полигон на место
...
Рейтинг: 0 / 0
Вопрос скорее по алгоритмизации...
    #33771596
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не самый удачный алгоритм в рамках постановки. Простой пример: допустим, здание есть квадрат со стороной 1, то есть (0;0)-(1;0)-(1;1)-(0;1). Допустим, из-за ошибки вершина (1;1) съехала в (0.7;0.7). Пошли в обход против часовой стрелки.

В итоге Ваш алгоритм сначала переместит съехавшую вершину куда-нибудь в (1;0.76), потом возьмет правильную вершину (0;1) и сдернет ее с места, куда-нибудь в (0.24;0.76). Далее он в лучшем случае остановится (и мы вместо квадрата получим трапецию), в худшем - еще и дернет угол (0;0).

В итоге - из фигуры с тремя правильными углами получится фигура с одним-двумя правильными углами. А смещение по центроидам добьет и последний правильный угол.
...
Рейтинг: 0 / 0
Вопрос скорее по алгоритмизации...
    #33772041
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerВ итоге - из фигуры с тремя правильными углами получится фигура с одним-двумя правильными углами. А смещение по центроидам добьет и последний правильный угол.Согласен, если под словом "угол" понимать "вершина".
И, кстати, полученная в итоге ломаная вряд ли будет замкнутой...

Впрочем, если погрешность измерения стороны здания составляет 30% от его длины, то, думаю, ничего страшного не будет в изменении его размеров и позиции центра на 10-20% от его длины.
...
Рейтинг: 0 / 0
Вопрос скорее по алгоритмизации...
    #33772828
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftВпрочем, если погрешность измерения
Это не погрешность измерения, а погрешность ввода данных.

miksoftто, думаю, ничего страшного не будет в изменении его размеров и позиции центра на 10-20% от его длины.
Вопрос в том, что этот алгоритм испортил данные. "Оставить как было" - было бы явно лучше по сравнению с тем, что получилось в итоге. Можно, конечно, сказать, что испортил терпимо, но на глаз, такой эффект будет почти всегда - этот алгоритм справится хорошо только в весьма специфичном случае: ребро неправильно повернуто при сохранении его длины.
...
Рейтинг: 0 / 0
Вопрос скорее по алгоритмизации...
    #33773369
botpride
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще, подобные вещи всегда делались на релаксационных моделях.
Грубо говоря: одно ребро (главное) закрепляем, а остальные считаем пружинками жесткости k (номинальная длина, естественно, равна изначальной), а углы также считаем пружинными шарнирами (или как там это официально называется), с номинальным углом 90 градусов и жесткостью кручения k1.
Соотношение k/k1 дает преференцию - стараться удерживать исходные длины сторон в ущерб точности углов, или выдерживать углы в ущерб сохранению длин сторон.

Далее итеративно сдвигаем каждую вершину по очереди согласно физической модели. При расчете, естественно, каждую вершину считаем связанной только с непосредственными соседями.
Т.е., если рассмотреть треугольник А-В-С, то "двигаемая" вершина - В, силы, действующие на нее - два вектора, направленные вдоль ребер, и один - по медиане угла.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вопрос скорее по алгоритмизации...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]