Увеличить центр города, уменьшив окраины

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Ответить
trololo
Новоприбывший
Сообщения: 2
Зарегистрирован: 15 май 2012, 09:55
Репутация: 0

Увеличить центр города, уменьшив окраины

Сообщение trololo »

Здравствуйте. Стоит следующая задача, не знаю как подступиться.
Есть карта Москвы, необходимо изменить карту: центр города увеличить, а за ТТК сжать.
Примерно как на картинке
http://s019.radikal.ru/i640/1205/79/e4ce993a7f59.png

Натянуть на шар - не получается достаточного увеличения центра.
А трансформировать чтобы растянуть - теряется точность.

Какие есть варианты ?
ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Увеличить центр города, уменьшив окраины

Сообщение ericsson »

Карта - растр или вектор?
"Теряется точность" - что это значит?
Спроецировать на тело вращения параболы - не пойдет (раз на шар уже пробовали)?
trololo
Новоприбывший
Сообщения: 2
Зарегистрирован: 15 май 2012, 09:55
Репутация: 0

Re: Увеличить центр города, уменьшив окраины

Сообщение trololo »

Вектор.

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

Как это делается ?
Аватара пользователя
Пётр Дубоделов
Завсегдатай
Сообщения: 271
Зарегистрирован: 21 апр 2009, 13:58
Репутация: 12
Откуда: Бурашево
Контактная информация:

Re: Увеличить центр города, уменьшив окраины

Сообщение Пётр Дубоделов »

Присоединяюсь к вопросу и немного расширю его:
Интересно найти простой способ построения анаморфоз. Видел примеры, преимущественно в зарубежных изданиях, когда география(границы полигона) визуально искажаются в зависимости от значения показателя.
Пример
"Если карта не соответствует местности, доверяй местности."
ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Увеличить центр города, уменьшив окраины

Сообщение ericsson »

Хорошо, что вектор.
Про ошибку все равно не очень понял, ну да ладно.
Про проекцию на параболическую поверхность спросил просто из-за того, что было упомянуто натягивание на сферу :)
А мой способ был бы следующим:
- будем работать в полярных координатах
- наша задача - сдвинуть каждую точку карты в пределах радиуса 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: Увеличить центр города, уменьшив окраины

Сообщение rhot »

Пётр Дубоделов писал(а):Интересно найти простой способ построения анаморфоз.
http://scapetoad.choros.ch/
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Увеличить центр города, уменьшив окраины

Сообщение ericsson »

А, забыл добавить (вспомнил, глянув по на материал по ссылке про анаморфоз) - вместо функции d=f(r) можно использовать и сгенерированную как угодно последовательность значений d достаточного "разрешения" (длины), это будет своеобразная LUT. Дабы не случилось ступенчатости, значения между числами из LUT просто интерполируются.
Аналогично, вместо одномерной LUT можно использовать двумерную, тогда это будет уже displacement map (интерполяция в таком случае тоже должна быть двумерной (между тремя или четырьмя ближайшими точками карты смещения). Ее можно сгенерировать хоть в растровом графическом редакторе, повозюкав белой кисточкой с размытыми краями по черному фону.
gamm
Гуру
Сообщения: 4168
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1107
Ваше звание: программист
Откуда: Казань

Re: Увеличить центр города, уменьшив окраины

Сообщение gamm »

анаморфоза произвольного вида строится довольно просто, так дифурщики делают сетки конечных элементов с переменным размером.
1) область покрывается достаточно густой сеткой, обычно регулярной треугольной
2) на сетке задается функция "увеличения" (как должна измениться метрика)
3) края (узлы на границе) фиксируются, и запускается итерационный алгоритм, который пытается подвинуть соседние свободные вершины сетки так, чтобы расстояние между ними увеличилось/уменьшилось в соответствии с заданной функцией. Шаг делают достаточно маленьким, чтобы не порушить топологию.
4) полученная треугольная сетка используется для преобразования координат. Получится упоминавшаяся двумерная LUT. Если сетка достаточно густая, то артефактов практически не видно.
Ответить

Вернуться в «Общий - ПО»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя