Увеличить центр города, уменьшив окраины
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 15 май 2012, 09:55
- Репутация: 0
Увеличить центр города, уменьшив окраины
Здравствуйте. Стоит следующая задача, не знаю как подступиться.
Есть карта Москвы, необходимо изменить карту: центр города увеличить, а за ТТК сжать.
Примерно как на картинке
http://s019.radikal.ru/i640/1205/79/e4ce993a7f59.png
Натянуть на шар - не получается достаточного увеличения центра.
А трансформировать чтобы растянуть - теряется точность.
Какие есть варианты ?
Есть карта Москвы, необходимо изменить карту: центр города увеличить, а за ТТК сжать.
Примерно как на картинке
http://s019.radikal.ru/i640/1205/79/e4ce993a7f59.png
Натянуть на шар - не получается достаточного увеличения центра.
А трансформировать чтобы растянуть - теряется точность.
Какие есть варианты ?
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: Увеличить центр города, уменьшив окраины
Карта - растр или вектор?
"Теряется точность" - что это значит?
Спроецировать на тело вращения параболы - не пойдет (раз на шар уже пробовали)?
"Теряется точность" - что это значит?
Спроецировать на тело вращения параболы - не пойдет (раз на шар уже пробовали)?
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 15 май 2012, 09:55
- Репутация: 0
Re: Увеличить центр города, уменьшив окраины
Вектор.
То что после трансформации по точкам исходной и конечной окружности, между конечными точками искажение. Тоесть требуется бесконечное их множество.
Как это делается ?
То что после трансформации по точкам исходной и конечной окружности, между конечными точками искажение. Тоесть требуется бесконечное их множество.
Как это делается ?
- Пётр Дубоделов
- Завсегдатай
- Сообщения: 271
- Зарегистрирован: 21 апр 2009, 13:58
- Репутация: 12
- Откуда: Бурашево
- Контактная информация:
Re: Увеличить центр города, уменьшив окраины
Присоединяюсь к вопросу и немного расширю его:
Интересно найти простой способ построения анаморфоз. Видел примеры, преимущественно в зарубежных изданиях, когда география(границы полигона) визуально искажаются в зависимости от значения показателя.
Пример
Интересно найти простой способ построения анаморфоз. Видел примеры, преимущественно в зарубежных изданиях, когда география(границы полигона) визуально искажаются в зависимости от значения показателя.
Пример
"Если карта не соответствует местности, доверяй местности."
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: Увеличить центр города, уменьшив окраины
Хорошо, что вектор.
Про ошибку все равно не очень понял, ну да ладно.
Про проекцию на параболическую поверхность спросил просто из-за того, что было упомянуто натягивание на сферу
А мой способ был бы следующим:
- будем работать в полярных координатах
- наша задача - сдвинуть каждую точку карты в пределах радиуса R от центра на некое расстояние, которое будет большим в центре и убывать (по закону, который определим далее) до нуля к краю (R)
- сдвигать будем не прибавлением, а умножением координаты r каждой точки на некое значение d
- придумаем (тут уж хозяин - барин, можно экспериментировать как угодно) некую функцию d=f(r), где r будет меняться от 0 до R, а d будет меняться от d1 (сдивга точки, карты, находящейся ближе всего к центру) до 0. Функцию можно придумать даже какую-нибудь параметрическую, чтобы по вертикали и горизонтали растяжение было разным, в духе d=f(rx,ry)
- ну а дальше - дело техники: переводим x1,y1 каждой точки в r,φ , превращем в r*d(r),φ и обратно в x2,y2
Про ошибку все равно не очень понял, ну да ладно.
Про проекцию на параболическую поверхность спросил просто из-за того, что было упомянуто натягивание на сферу

А мой способ был бы следующим:
- будем работать в полярных координатах
- наша задача - сдвинуть каждую точку карты в пределах радиуса R от центра на некое расстояние, которое будет большим в центре и убывать (по закону, который определим далее) до нуля к краю (R)
- сдвигать будем не прибавлением, а умножением координаты r каждой точки на некое значение d
- придумаем (тут уж хозяин - барин, можно экспериментировать как угодно) некую функцию d=f(r), где r будет меняться от 0 до R, а d будет меняться от d1 (сдивга точки, карты, находящейся ближе всего к центру) до 0. Функцию можно придумать даже какую-нибудь параметрическую, чтобы по вертикали и горизонтали растяжение было разным, в духе d=f(rx,ry)
- ну а дальше - дело техники: переводим x1,y1 каждой точки в r,φ , превращем в r*d(r),φ и обратно в x2,y2
- rhot
- Гуру
- Сообщения: 1727
- Зарегистрирован: 25 янв 2011, 17:50
- Репутация: 194
- Ваше звание: доктор
- Откуда: Архангельск
Re: Увеличить центр города, уменьшив окраины
http://scapetoad.choros.ch/Пётр Дубоделов писал(а):Интересно найти простой способ построения анаморфоз.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: Увеличить центр города, уменьшив окраины
А, забыл добавить (вспомнил, глянув по на материал по ссылке про анаморфоз) - вместо функции d=f(r) можно использовать и сгенерированную как угодно последовательность значений d достаточного "разрешения" (длины), это будет своеобразная LUT. Дабы не случилось ступенчатости, значения между числами из LUT просто интерполируются.
Аналогично, вместо одномерной LUT можно использовать двумерную, тогда это будет уже displacement map (интерполяция в таком случае тоже должна быть двумерной (между тремя или четырьмя ближайшими точками карты смещения). Ее можно сгенерировать хоть в растровом графическом редакторе, повозюкав белой кисточкой с размытыми краями по черному фону.
Аналогично, вместо одномерной LUT можно использовать двумерную, тогда это будет уже displacement map (интерполяция в таком случае тоже должна быть двумерной (между тремя или четырьмя ближайшими точками карты смещения). Ее можно сгенерировать хоть в растровом графическом редакторе, повозюкав белой кисточкой с размытыми краями по черному фону.
-
- Гуру
- Сообщения: 4168
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: Увеличить центр города, уменьшив окраины
анаморфоза произвольного вида строится довольно просто, так дифурщики делают сетки конечных элементов с переменным размером.
1) область покрывается достаточно густой сеткой, обычно регулярной треугольной
2) на сетке задается функция "увеличения" (как должна измениться метрика)
3) края (узлы на границе) фиксируются, и запускается итерационный алгоритм, который пытается подвинуть соседние свободные вершины сетки так, чтобы расстояние между ними увеличилось/уменьшилось в соответствии с заданной функцией. Шаг делают достаточно маленьким, чтобы не порушить топологию.
4) полученная треугольная сетка используется для преобразования координат. Получится упоминавшаяся двумерная LUT. Если сетка достаточно густая, то артефактов практически не видно.
1) область покрывается достаточно густой сеткой, обычно регулярной треугольной
2) на сетке задается функция "увеличения" (как должна измениться метрика)
3) края (узлы на границе) фиксируются, и запускается итерационный алгоритм, который пытается подвинуть соседние свободные вершины сетки так, чтобы расстояние между ними увеличилось/уменьшилось в соответствии с заданной функцией. Шаг делают достаточно маленьким, чтобы не порушить топологию.
4) полученная треугольная сетка используется для преобразования координат. Получится упоминавшаяся двумерная LUT. Если сетка достаточно густая, то артефактов практически не видно.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя