![]() |
|
![]() ![]() ![]() |
|
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 4 Всего: 360 |
Допустим есть рабочий интервал 0-10000
Теперь существует множество интервальчиков (примеры: 10-25, 5-500,2000-2003) и всех их надо "растянуть" на рабочий. ![]() Первое что пришло в голову - проекция. Она работает достаточно неплохо, но два нюанса есть. ![]() 1) По краям элементы расходятся быстрее чем в середине 2) Интервалы - это на самом деле примеры по которым предсказываем реальные данные. Это означает, что числа могут выходить за пределы примеров и проекция пошлёт их далеко за пределы рабочего т.к. по краям расхожесть большая (см. пункт 1) ![]() Если представить интервалы как резинки, как можно наидудобнее растянуть их на одну длину? Или всё таки проекция не так уж и плоха? |
|||
|
||||
Artemios |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: 1 Всего: 50 |
А если тупое линейное сжатие/растяжение пространства?
(то есть элеметнарное масштабирование) плюс смещение... Это сообщение отредактировал(а) Artemios - 2.5.2007, 12:46 -------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
|||
|
||||
kulibinka |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 191 Регистрация: 20.11.2006 Репутация: 2 Всего: 4 |
Для похожей задачи пользовалася следующим кодом на питоне:
|
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 4 Всего: 360 |
kulibinka, огромнейшее спасибо! то, что нужно!
![]() ![]() |
|||
|
||||
Artemios |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: 1 Всего: 50 |
растяжение смещение. ![]() -------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 4 Всего: 360 |
Да, это то же самое. И проекция так же. Всё замечательно, но края расходятся довольно круто. Как бы их о буздать?...
Пример растягиваем числа 300-320 на интервал 0-5000 получается коеффициент 250. если вдруг придёт число 321, то займёт значение уже 5250, а 299 будет уже -250. А это почти полный исходный интервал! и 5% от общего! Надо бы проекцию, но не прямыми, а изогнутыми чтобы в заданном интервале было всё нормально, а значения-аутсайдеры не улетали далеко. |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 4 Всего: 360 |
||||
|
||||
Artemios |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: 1 Всего: 50 |
Неа, проекция из твоих верхних картинок не является линейным преобразованием, ибо там изометрическая проекция. Если объяснять "на пальцах" то пусть d -- малый отрезок и D -- большой. При изометрической проекции равным подъинтервалам на d будут соответствовать неравные подъинтервалы на D. При линейном преобразовании (как у kulibinka) -- равным соответствуют равные, и в принципе 5% от общего -- это то же самое, как и 321-320=1 для интервала 320-300=20. Если тебе неважно сохранение пропорций, попробуй обратную изометрию. Например, малый отрезок d выгни по дуге окружности с центром в точке, откуда ведёшь проекционные лучи. Только для каждого малого интервала придется подбирать свой радиус и расстояние от центра до D (это уж на твой вкус, пока "разлет" не будет тебя удовлетворять). Добавлено через 3 минуты и 22 секунды P.S. И лучи неизвестными кривыми не придется заменять. -------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 4 Всего: 360 |
Artemios, хорошая идея... можно попытаться..
Не важно, важно только, что порядок точек сверху вниз не нарушится. |
|||
|
||||
Artemios |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: 1 Всего: 50 |
Мда... Ночь, устал, пространственное мышление отсутствует напрочь. Конечно же, при предложенном мной варианте "разлет" на краях будет еще больше первоначального. А надо бы "выгнуть" по окружности не малый отрезок d, а большой D -- тогда все нормально. -------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |