Re: Grafico 3D real time
-
wrote on 4 Dec 2018, 09:02 last edited by Lorenz_95 12 Apr 2018, 10:00
Ho guardato i seguenti esempi :
https://doc.qt.io/qt-5.11/qtdatavisualization-audiolevels-example.html
https://doc.qt.io/qt-5.11/q3dscatter.htmlMa:
- nel primo non capisco quale/i sia/siano la/e funzione/i che mi permettono di leggere i dati nel tempo
- nel secondo c'è un modo per leggere i dati in maniera dinamica come nel primo esempio (magari da un file che viene aggiornato ogni tot secondi) e fare in modo che vengano plottati sul grafico?
Quello che devo fare è plottare su un grafico 3D xyz dei punti che rappresentano la posizione nello spazio di un oggetto. I valori di posizione li ho già ricavati da un altro programma che ha come input i dati che mi legge un accellerometro.
-
Ho guardato i seguenti esempi :
https://doc.qt.io/qt-5.11/qtdatavisualization-audiolevels-example.html
https://doc.qt.io/qt-5.11/q3dscatter.htmlMa:
- nel primo non capisco quale/i sia/siano la/e funzione/i che mi permettono di leggere i dati nel tempo
- nel secondo c'è un modo per leggere i dati in maniera dinamica come nel primo esempio (magari da un file che viene aggiornato ogni tot secondi) e fare in modo che vengano plottati sul grafico?
Quello che devo fare è plottare su un grafico 3D xyz dei punti che rappresentano la posizione nello spazio di un oggetto. I valori di posizione li ho già ricavati da un altro programma che ha come input i dati che mi legge un accellerometro.
wrote on 5 Dec 2018, 08:32 last edited by@Lorenz_95 said in Re: Grafico 3D real time:
nel primo non capisco quale/i sia/siano la/e funzione/i che mi permettono di leggere i dati nel tempo
Concordo non sia un gran bel design. Praticamente puoi immaginare
AudioLevelsIODevice
come fosse un file.m_audioInput->start(m_device);
fa in modo che l'audio input venga salvato su quel "file" (QAudioInput
chiamawriteData
al suo interno). Internamente pero'AudioLevelsIODevice
invece di salvare l'input lo usa per plottarlo.Anche nel secondo caso il concetto e' sempre lo stesso:
- crea un
QScatterDataArray
che contiene le serie - crea un
QScatterDataRow
per ogni serie che contiene i punti - use
QScatterDataProxy::resetArray
per aggiornare il grafico
Se sei piu' praticon con model/view puoi usare
QItemModelScatterDataProxy
ma internamente usa lo stesso metodo di sopra quindi non e' molto piu' efficiente. -
wrote on 7 Dec 2018, 09:54 last edited by
Grazie per la risposta, adesso mi è più chiara la situazione. E che sono nuovo e sto appena cercando di capire come usare QT.
Solo un paio di cosa che non mi sono chiare:
- QScatterDataProxy::resetArray mi aggiorna il grafico ma tiene memoria anche dei vecchi punti che ho plottato?
- Quando parli di "serie" intendi ad esempio {X=1, Y=0, Z=2}
-
wrote on 7 Dec 2018, 10:06 last edited by
- No
- Per serie intendo gruppi di punti. per esempio una serie puo' essere un vettore di coordinate xyz che rappresenta posizione di un oggetto nel tempo mentre una seconda serie rappresenta un secondo oggetto e cosi' via
-
wrote on 7 Dec 2018, 13:25 last edited by
- C'è un modo per memorizzare i punti precedenti e che vengano plottati ogni volta che aggiorno?
- Ok ho capito
-
wrote on 12 Dec 2018, 08:47 last edited by
- certo,
QScatterDataRow
si ricorda i punti. Quindi ti basta aggiungere un punto alla fine e passare lo stesso array aresetArray
- certo,
3/6