2017-02-13 4 views
0

Это более открытая дискуссионная тема, чем что-либо еще. В настоящее время я храню 50 Float32 значений в своем NSMutableArray *voltageArray, прежде чем обновить свой CPTPlot *plot. Каждый раз, когда я получаю 50 значений, я удаляю предыдущие 50 из voltageArray и повторяю процесс .... всегда отображая 50 значений в «реальном времени» на моем графике.CorePlot - динамические данные по оси x с использованием двух массивов

Однако данные, которые я получаю (который является напряжением, поступающим от модуля Cypress BLE, оснащенного датчиком давления), настолько быстр, что любое изменение (от 0,4 до 4,0 В, отсутствие давления для большого количества давления) не может быть на моем графике. Он просто отображается как прямая линия, варьируя вверх и вниз, не показывая увеличенных или уменьшенных наклонов.

Чтобы показать общее изменение, я хотел взять эти 50 значений, сохранить их в первом индексе другого NSMutableArray *stampArray и использовать индекс stampArray для отображения информации. Между тем, метод numberOfRecordsForPlot: будет выглядеть следующим образом:

- (NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plotnumberOfRecords { 
    return (DATA_PER_STAMP * _stampCount); 
} 

Первоначально это было бы 50, то после 50 кусков данных захватываются из BLE модуля, _stampCount увеличится на единицу, а количество записей для участка будет увеличьте на 50 (до примерно 2500-10000 дальности, затем я обновил все это и перезапустил процесс.)

Правильно ли это? Как я смогу сделать первые 50 очков на графике, построив следующие 50 и т. Д.? Представьте график y = x^2 и как выглядит граф при применении интеграции (полное разбиение области под кривой на прямоугольники).

ответ

0

Посмотрите демоверсию «Real Time Plot» в галерее пример приложения, включенный в Core Plot. Он начинается с пустого участка, добавляя новую точку за каждый цикл до достижения максимального количества точек. После этого одна старая точка удаляется для каждого добавленного нового, поэтому общее число остается постоянным. Демо использует таймер для передачи случайных данных на сюжет, но ваше приложение может, естественно, собирать данные из любого места. Обязательно всегда взаимодействуйте с графиком из основного потока.

Сомневаюсь, что вы сможете отображать 10 000 точек данных на одном графике (на вашем дисплее имеется достаточно пикселей, чтобы разрешить это много точек?). Если нет, вы получите гораздо лучшую производительность рисования, если вы фильтруете и/или сглаживаете данные, чтобы удалить некоторые точки, прежде чем отправлять их на график.

+0

Спасибо за ответ, и это в значительной степени то, что мне нужно. 2500-10000 - необразованная оценка; если что-то> 1000 заставляет производительность пострадать, а переход «<1000» будет работать. Что касается Графической галереи, какие конкретные классы/методы следует посмотреть, чтобы увидеть добавление и удаление точек? Я новичок в этом, поэтому я все еще пытаюсь обойти все это. –

+0

Посмотрите на '-newData:' в 'RealTimePlot.m'. –

+0

Удивительный, выглядит довольно просто. Grazie –

Смежные вопросы