Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопрос скорее по алгоритмизации...
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, уважаемые. Есть интересная задачка: Дано: Координаты вершин полигона (X1,Y1.....Xn,Yn) Нужно изменить координаты вершин так, чтобы: а) все углы между смежными рёбрами были 90 и 180 градусов б) самое длинное ребро было параллельно его прототипу (предыдущему состоянию) в) центроид полученного полигона совпадал с центроидом исходного полигона Речь идёт о ГИС'овской задаче, редактируем неверно нарисованные дома. У кого-нибудь есть идеи? P.S. Ну и естественно все это программно P.S2. Возможно придется делать группы углов, если например дом выглядит так: ___ / _ \ /_/ \_\ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 14:24 |
|
||
|
Вопрос скорее по алгоритмизации...
|
|||
|---|---|---|---|
|
#18+
Имхо у Вас не очень удачная постановка задачи. В Москве можно найти, например, многогранные дома, в которых реальный угол между реальными ребрами, например, 144 градуса (правильный десятиугольник). С точки зрения неправильно нарисованных домов... сходу я бы сделал эвристику, опираясь на следующий набор критериев: - пересечения граней - острые углы - отсутствие связи с ближайшей вершиной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 17:09 |
|
||
|
Вопрос скорее по алгоритмизации...
|
|||
|---|---|---|---|
|
#18+
Еще, как вариант, можно сделать библиотеку безмасштабных контуров и подбирать здания под имеющиеся контуры. Здания, которые не удается сопоставить уже известному контуру, проверяем руками и вносим в библиотеку контуров (или зданию ставим флаг "контур не проверять, оставить как есть"). Дополнительно подкину еще одно здание: Варшавка, 125. Если память мне не изменяет, оно закругленное, но имеет всего четыре угла по 90 градусов (если не считать мелкие пристройки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 17:21 |
|
||
|
Вопрос скорее по алгоритмизации...
|
|||
|---|---|---|---|
|
#18+
softwarerИмхо у Вас не очень удачная постановка задачи. В Москве можно найти, например, многогранные дома, в которых реальный угол между реальными ребрами, например, 144 градуса (правильный десятиугольник). Мало того, в Москве можно найти дома у которых вообще нет углов - круглые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 17:36 |
|
||
|
Вопрос скорее по алгоритмизации...
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей АлексеевичМало того, в Москве можно найти дома у которых вообще нет углов - круглые. Безусловно. Собственно, прямо напротив меня - здание, имеющее форму сектора (четверть круга). Но это отдельный вопрос, который если решен, то будет отдельно обрабатываться; я ограничился случаем, вроде как подходящим под постановку автора (здание - многоугольник). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 18:20 |
|
||
|
Вопрос скорее по алгоритмизации...
|
|||
|---|---|---|---|
|
#18+
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) перемещаем новый полигон на место ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2006, 06:57 |
|
||
|
Вопрос скорее по алгоритмизации...
|
|||
|---|---|---|---|
|
#18+
Не самый удачный алгоритм в рамках постановки. Простой пример: допустим, здание есть квадрат со стороной 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). В итоге - из фигуры с тремя правильными углами получится фигура с одним-двумя правильными углами. А смещение по центроидам добьет и последний правильный угол. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2006, 09:51 |
|
||
|
Вопрос скорее по алгоритмизации...
|
|||
|---|---|---|---|
|
#18+
softwarerВ итоге - из фигуры с тремя правильными углами получится фигура с одним-двумя правильными углами. А смещение по центроидам добьет и последний правильный угол.Согласен, если под словом "угол" понимать "вершина". И, кстати, полученная в итоге ломаная вряд ли будет замкнутой... Впрочем, если погрешность измерения стороны здания составляет 30% от его длины, то, думаю, ничего страшного не будет в изменении его размеров и позиции центра на 10-20% от его длины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2006, 12:43 |
|
||
|
Вопрос скорее по алгоритмизации...
|
|||
|---|---|---|---|
|
#18+
miksoftВпрочем, если погрешность измерения Это не погрешность измерения, а погрешность ввода данных. miksoftто, думаю, ничего страшного не будет в изменении его размеров и позиции центра на 10-20% от его длины. Вопрос в том, что этот алгоритм испортил данные. "Оставить как было" - было бы явно лучше по сравнению с тем, что получилось в итоге. Можно, конечно, сказать, что испортил терпимо, но на глаз, такой эффект будет почти всегда - этот алгоритм справится хорошо только в весьма специфичном случае: ребро неправильно повернуто при сохранении его длины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2006, 16:36 |
|
||
|
Вопрос скорее по алгоритмизации...
|
|||
|---|---|---|---|
|
#18+
Вообще, подобные вещи всегда делались на релаксационных моделях. Грубо говоря: одно ребро (главное) закрепляем, а остальные считаем пружинками жесткости k (номинальная длина, естественно, равна изначальной), а углы также считаем пружинными шарнирами (или как там это официально называется), с номинальным углом 90 градусов и жесткостью кручения k1. Соотношение k/k1 дает преференцию - стараться удерживать исходные длины сторон в ущерб точности углов, или выдерживать углы в ущерб сохранению длин сторон. Далее итеративно сдвигаем каждую вершину по очереди согласно физической модели. При расчете, естественно, каждую вершину считаем связанной только с непосредственными соседями. Т.е., если рассмотреть треугольник А-В-С, то "двигаемая" вершина - В, силы, действующие на нее - два вектора, направленные вдоль ребер, и один - по медиане угла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2006, 20:00 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=33771596&tid=1346801]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 365ms |

| 0 / 0 |
