2017-02-13 1 views
0

Il s'agit plus d'un sujet de discussion ouvert qu'autre chose. Actuellement, je stocke 50 valeurs Float32 dans mon NSMutableArray *voltageArray avant de rafraîchir mon CPTPlot *plot. Chaque fois que j'obtiens 50 valeurs, j'enlève les 50 précédentes du voltageArray et répète le processus .... affichant toujours les 50 valeurs en "temps réel" sur mon intrigue. Cependant, les données que je reçois (qui sont la tension provenant d'un module Cypress BLE équipé d'un transducteur de pression) sont si rapides que toute variation (0,4 V à 4,0 V, pas de pression à beaucoup de pression) ne peut pas être vu sur mon graphique. Il apparaît simplement comme une ligne droite, variant de haut en bas sans montrer de pentes accrues ou diminuées.CorePlot - données d'axe x dynamiques utilisant deux matrices

Pour montrer le changement global, je voulais prendre ces 50 valeurs, les stocker dans le premier index d'un autre NSMutableArray *stampArray et utiliser l'index de stampArray pour afficher l'information. Pendant ce temps, la méthode numberOfRecordsForPlot: ressemblerait à ceci:

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

Ce serait initialement 50, puis après 50 morceaux de données sont capturées à partir du module BLE, _stampCount augmenterait par un, et le nombre d'enregistrements pour le tracé serait augmenter de 50 (jusqu'à environ 2500-10000 gamme, alors je rafraîchirais le tout et recommencerais le processus.)

Est-ce la bonne approche? Comment pourrais-je faire en sorte que les 50 premiers points restent sur le graphique, tout en construisant les 50 suivants, etc.? Imaginez un graphique y = x^2, et à quoi ressemble le graphe lors de l'application de l'intégration (le tout décomposant la zone sous la courbe en rectangles).

Répondre

0

Regardez la démo "Real Time Plot" dans la Plot Gallery Exemple d'application inclus avec Core Plot. Il commence avec un tracé vide, en ajoutant un nouveau point chaque cycle jusqu'à atteindre le nombre maximum de points. Après cela, un ancien point est supprimé pour chaque nouveau ajouté de sorte que le nombre total reste constant. La démo utilise une minuterie pour transmettre des données aléatoires à l'intrigue, mais votre application peut bien sûr collecter des données de n'importe où. Assurez-vous de toujours interagir avec le graphique du thread principal.

Je doute que vous puissiez afficher 10 000 points de données sur un seul tracé (votre écran a-t-il suffisamment de pixels pour résoudre ce nombre de points?). Sinon, vous obtiendrez de meilleures performances de dessin si vous filtrez et/ou lissez les données pour supprimer certains des points avant de les envoyer à l'intrigue.

+0

Merci pour la réponse, et c'est à peu près ce que je suis après. 2500-10000 était une estimation non éduquée; si quelque chose> 1000 fait souffrir la performance que d'aller le "<1000" itinéraire fonctionnera. En ce qui concerne la galerie de tracés, quelles classes/méthodes spécifiques dois-je regarder pour voir l'ajout et la suppression de points? Je suis nouveau à ceci donc j'essaye toujours d'obtenir ma tête autour de tout cela. –

+0

Regardez '-newData:' dans 'RealTimePlot.m'. –

+0

Génial, semble assez simple. Grazie –