Re: Grafico 3D real time



  • Ho guardato i seguenti esempi :
    https://doc.qt.io/qt-5.11/qtdatavisualization-audiolevels-example.html
    https://doc.qt.io/qt-5.11/q3dscatter.html

    Ma:

    • 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.



  • @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 chiama writeData 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.



  • 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:

    1. QScatterDataProxy::resetArray mi aggiorna il grafico ma tiene memoria anche dei vecchi punti che ho plottato?
    2. Quando parli di "serie" intendi ad esempio {X=1, Y=0, Z=2}


    1. No
    2. 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


    1. C'è un modo per memorizzare i punti precedenti e che vengano plottati ogni volta che aggiorno?
    2. Ok ho capito


    1. certo, QScatterDataRow si ricorda i punti. Quindi ti basta aggiungere un punto alla fine e passare lo stesso array a resetArray

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.