Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
64 / 55 / 13
Регистрация: 16.03.2017
Сообщений: 426
1

Как строить только ту часть графика, что видна на экране?

02.11.2017, 15:07. Просмотров 404. Ответов 19
Метки нет (Все метки)

Как строить только ту часть графика, что видна на экране? Как сделать так, чтобы при прокрутке графика он достраивался?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.11.2017, 15:07
Ответы с готовыми решениями:

Сгорел диод, видна только его часть
Сломались весы, и при вскрытии увидел это: Есть идеи? Спасибо.

как сделать так, что б из всего графика "показывалась" только его часть от одного задаваемого числа до другого?
program Sinx; uses crt, graph; var gd,gm: integer; xe,ye,xen,xek,yen, yek: integer; ...

Графика: как правильно строить графики?
Нужна инфа как строить правильно графики. Вот у меня есть код на постройку графика.Как мне самому...

Как сделать что бы весь калькулятор выводился сразу, а не только верхняя его часть?
Как сделать что бы весь калькулятор выводился сразу, а не только верхняя его часть? И как я могу...

19
6914 / 5979 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
02.11.2017, 15:33 2
Ну делай расчёт только для того диапазона, который виден.
При прокрутке где?
0
64 / 55 / 13
Регистрация: 16.03.2017
Сообщений: 426
02.11.2017, 15:34  [ТС] 3
Имел ввиду при протаскивании графика вправо-влево. А как узнать какие точки по оси х видны на экране?
0
6914 / 5979 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
02.11.2017, 15:37 4
Ты сам его строишь или там какой-то виджет готовый? Если сам, то должен знать координаты.
0
64 / 55 / 13
Регистрация: 16.03.2017
Сообщений: 426
02.11.2017, 15:40  [ТС] 5
Я сам его строю. К примеру у меня 10000 точек, из ник на экране по оси Х влезут 50. При протасивании графика влево или вправо, будут видны другие 50 точек. При изменении масштаба будут видны уже 67, а потом и 104 точки, к примеру. Как мне узнать какие именно точки видны в данный момент времени на экране?
0
6914 / 5979 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
02.11.2017, 16:01 6
Расчётом. Определи минимальное и максимальное x, которые ещё видны, и не бери точки вне диапазона.
0
64 / 55 / 13
Регистрация: 16.03.2017
Сообщений: 426
02.11.2017, 16:05  [ТС] 7
Но как это сделать, учитывая что график протаскивается вручную, и не возможно предугадать какую часть графика увидишь.? Можно ли просто определить первую и последнюю точки, что видны на экране?
0
6914 / 5979 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
02.11.2017, 16:17 8
Ты положение центра координат знаешь? Размер области с графиком и масштаб? Вот на основании этого и считай.
0
64 / 55 / 13
Регистрация: 16.03.2017
Сообщений: 426
02.11.2017, 16:21  [ТС] 9
Масштаб пока знаю. Он зависит от колесика мыши. Как узнать центр видимых координат?
0
6914 / 5979 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
02.11.2017, 17:29 10
Ну ты же его сам рисуешь по координатам. Как можно не знать центр?
0
64 / 55 / 13
Регистрация: 16.03.2017
Сообщений: 426
02.11.2017, 18:32  [ТС] 11
Очень просто. Взять 1000 точек, из них я допустим при загрузке вижу 980-1000.Потом рандомно потащил график примерно на середину. Как в таких обстоятельствах узнать центр?

Добавлено через 18 минут
по идее должна помочь функция
C++ (Qt)
1
void QCPGraph :: getVisibleDataBounds ( QCPGraphDataContainer :: const_iterator &  начать , QCPGraphDataContainer :: const_iterator &  конец , const QCPDataRange &  rangeRestriction  ) Cons
, но только как ей воспользоваться?
0
6914 / 5979 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
02.11.2017, 19:20 12
Я же спросил, сам рисуешь или готовыми средствами. Если у тебя QCustomPlot, так и говори.
Он же сам всё рисует. Зачем тебе вообще об этом думать?
0
64 / 55 / 13
Регистрация: 16.03.2017
Сообщений: 426
02.11.2017, 19:27  [ТС] 13
Мне нужно оптимизировать график. Нужно рисовать только ту часть графика, что видна на экране, иначе будет лишняя нагрузка и замедление работы, т.к. данных может быть очень много. Также это решит вопрос с автомасштабированием по оси У.
0
6914 / 5979 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
02.11.2017, 19:33 14
А почему ты думаешь, что там рисуются все точки, а не те, что видны? Может, это уже реализовано. Ты просто передаёшь набор точек.
0
64 / 55 / 13
Регистрация: 16.03.2017
Сообщений: 426
02.11.2017, 19:39  [ТС] 15
Нет, рисуется сразу. Если указать масштаб относительно нужной точки, то сразу показывается только то, что попадает на экран, а все остальное тоже нарисовано. Также это подтверждает не автоизменияемый масштаб по оси у. Также это подтверждают другие программисты.
0
6914 / 5979 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
02.11.2017, 19:41 16
Замедление есть или ты предполагаешь?
0
406 / 370 / 62
Регистрация: 29.05.2015
Сообщений: 2,275
02.11.2017, 21:11 17
Цитата Сообщение от Михаиллллллл Посмотреть сообщение
Я сам его строю. К примеру у меня 10000 точек, из ник на экране по оси Х влезут 50. При протасивании графика влево или вправо, будут видны другие 50 точек. При изменении масштаба будут видны уже 67, а потом и 104 точки, к примеру. Как мне узнать какие именно точки видны в данный момент времени на экране?
Держать текущее положение графика и масштаб в переменных. Ты передвинул график - одновременно изменилось значение переменной позиции. Изменил масштаб - изменилось значение переменной масштаба. В любой момент времени у тебя есть положение и масштаб того, что на экране - достаточно, что-бы сосчитать, сколько точек видно.
0
64 / 55 / 13
Регистрация: 16.03.2017
Сообщений: 426
03.11.2017, 09:25  [ТС] 18
Так как узнать значение сдвига? Сдвиг всегда рандомный. В документации написано что getVisibleDataBounds() возвращает первую и последнюю точку, что видны на экране. Только пока не могу ей воспользоваться. Может быть вы знаете как ее запустить?
0
406 / 370 / 62
Регистрация: 29.05.2015
Сообщений: 2,275
03.11.2017, 09:44 19
Что значит рандомный сдвиг? У тебя график сам гуляет по экрану, куда захочет?

Что такое вообще сдвиг? Запоминается положение курсора мыши в момент нажатия. Мышка в зависимости от скорости перемещения выдаёт сигналы, по этим сигналам программа много раз перерисовывает график - получается мультик, иллюзия движения. Куда, сколько раз перерисовывает и на сколько - эта инфа есть в программе. Другое дело, используешь ты её или нет.
0
64 / 55 / 13
Регистрация: 16.03.2017
Сообщений: 426
03.11.2017, 13:19  [ТС] 20
Вот эту инфу я не знаю как получить.

Добавлено через 3 часа 31 минуту
оказалось вот так
C++ (Qt)
1
2
ui->chart->xAxis->range().lower
ui->chart->xAxis->range().higher
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2017, 13:19

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Цвет точки, которая не видна на экране
Функции GetPixel() и BitBlt() для получения корректного цвета или правильного копирования области...

Форма видна на панели задач, но на экране ее нет
Я скрыл первую форму вот так: this.Hide(); А показываю её так: this.Show(); Но форма не...

Не видна дробная часть числа
Поставил MVS 2012, возникла проблема - Не видна дробная часть числа! Пишу простой код : double...

Не видна часть рабочего стола
Всем дорого дня! Win 10, 64, Home. После установки программы, которая, как выяснилось в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.