Russian Qt Forum
Ноябрь 22, 2024, 13:58
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Алгоритмы
>
Масштаб графика по X
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Масштаб графика по X (Прочитано 5754 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Масштаб графика по X
«
:
Март 01, 2020, 14:42 »
Добрый день
Есть N double значений записанных с равным интервалом по времени. Требуется отмасштабить их по времени, напр из 100 значений сделать 30 или наоборот. Т.е. "сжать/растянуть (нарисованный) график по оси X", только цель - сами новые значения, рисовать не нужно.
Задача выглядит "элементарной", но когда дошло до дела - я с удивлением обнаружил что не имею ясного представления как делать
Ну "растянуть" еще так-сяк (хотя тоже есть проблемы), но вот "сжать" - хз. Ну давайте просто возьмем "каждую 3-ю точку" - вот и будет 30 значений вместо 100. Да, но так убьем мелкие детали. Ну или "новая точка = среднее 3 старых". А там свои минусы, будет сильно "размазываться" (переборщили с интегралом). Понятно что "идеально" оно не будет, но хотелось бы сделать грамотно, а не абы-как.
Ладно, погуглил что в дусте. Пока ничего не нашел, гляну тамошние хедеры. Вещь стопудово известная, может просто не везет с поисковым запросом. Что подскажете ?
Спасибо
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Масштаб графика по X
«
Ответ #1 :
Март 01, 2020, 15:49 »
Берите максимальное значение из группы точек, а не среднее.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Масштаб графика по X
«
Ответ #2 :
Март 03, 2020, 10:55 »
В общем, понял так что это частный случай популярной задачи "image resample", по-простому "масштабирование картинки", только одномерный (а не двумерный). И да, обширная теория, все сводится к "фильтрам", по существу к вычислению весов с которыми берутся соседние точки для осреднения. Тупенькое осреднение выше называется "box filter".
Для начала сделал по-народному, линейной интерполяцией чтобы иметь какой-то рабочий вариант, пусть дохленький. Ну вполне прилично, хотя и калечит на сжатии 2 и больше. Вообще если кривая и масштабирование разумны, то проходит почти все, разница невелика. Хотел "попробывать" Catmull-Rom, слышал его хвалят (может потому что красиво звучит?
). А он оказывается всего лишь частный случай bicubic который работает только на увеличение. Думаю может bilinear? Или Гауссом попарить?
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Масштаб графика по X
«
Ответ #3 :
Сентябрь 03, 2020, 11:56 »
Цитата: Old от Март 01, 2020, 15:49
Берите максимальное значение из группы точек, а не среднее.
+1, только надо и в другую сторону смотреть в зависимости от положения относительно нулевой линии.
Гаусс и прочие фильтры сгладят пики и не дадут верной картины.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Масштаб графика по X
«
Ответ #4 :
Сентябрь 03, 2020, 13:12 »
Я делал проще, по типу "просеивания" точек.
Например, когда нужно "отдалить" график (уменьшить масштаб), то отрисовывал какое-то конкретное кол-во точек (например 4096), просто брал не каждую точку из диапазона (где могут быть миллионы точек), а каждую N-ую (просто делил миллион на 4096), к примеру. Чтобы не "профукать" какие-то пики и прочее, можно отрисовывать не 4096 точек, а, скажем 8096 (чуть-чуть с запасом).
И вот по мере "приближения" графика (увеличения масштаба) до какого-то предела, уже не "просеивал" точки, типа для улучшения детализации.
Как то так, просто, топорно, надежно (не заморачивался с фильтрами и прочее, они нужны только на оочень больших масштабах, когда точек становится мало в заданном интервале и надо "экстраполировать" промежутки между ними). Т.к. нет смысла в какой-либо особой детализации если масштаб маленький.
«
Последнее редактирование: Сентябрь 03, 2020, 13:19 от kuzulis
»
Записан
ArchLinux x86_64 / Win10 64 bit
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...