Hallo,
ich versuche mich gerade in das das surface-example von QT einzuarbeiten
(https://doc.qt.io/qt-5/qtdatavisualization-surface-example.html) und
mit anderen Daten auszustatten was nicht so wirklich gelingt daher eine
kurze Verständnisfrage.
Lässt sich ein surface überhaupt mit "random" Daten bestücken? Beim
Scatter Example geht dies ohne Probleme, dort sind es auch "nur"
einzelne Datenpunkte im 3D Raum.
Beim surface hingegen sind die Punkte durch eine Oberfläche also wie ein
Stoff über Datenpunkte verbunden. Jetzt frage ich mich irgendwie muss
wohl der jeweilige Nachbar bekannt sein damit für die Darstellung klar
ist welcher Punkt zu welchem mit dem Stoff überzogen wird. Dort wird
flogendes wohl zum Daten füttern verwendet:
https://doc.qt.io/qt-5/qsurfacedataproxy.html
Im Code sieht es so aus, als würden mehrere Datenpunkte in Reihe/"Row"
erzeugt werden und dann erst in die dritte Dimension.
1 | void SurfaceGraph::fillSqrtSinProxy()
|
2 | {
|
3 | float stepX = (sampleMax - sampleMin) / float(sampleCountX - 1);
|
4 | float stepZ = (sampleMax - sampleMin) / float(sampleCountZ - 1);
|
5 |
|
6 | QSurfaceDataArray *dataArray = new QSurfaceDataArray;
|
7 | dataArray->reserve(sampleCountZ);
|
8 | for (int i = 0 ; i < sampleCountZ ; i++) {
|
9 | QSurfaceDataRow *newRow = new QSurfaceDataRow(sampleCountX);
|
10 | // Keep values within range bounds, since just adding step can cause minor drift due
|
11 | // to the rounding errors.
|
12 | float z = qMin(sampleMax, (i * stepZ + sampleMin));
|
13 | int index = 0;
|
14 | for (int j = 0; j < sampleCountX; j++) {
|
15 | float x = qMin(sampleMax, (j * stepX + sampleMin));
|
16 | float R = qSqrt(z * z + x * x) + 0.01f;
|
17 | float y = (qSin(R) / R + 0.24f) * 1.61f;
|
18 | (*newRow)[index++].setPosition(QVector3D(x, y, z));
|
19 | }
|
20 | *dataArray << newRow;
|
21 | }
|
22 |
|
23 | m_sqrtSinProxy->resetArray(dataArray);
|
24 | }
|
Die Daten sind im Beispiel gleichmäßig verteilt, was aber bei anderen
Daten nicht unbedingt so ist.
ZB beim scatter example gibt es eine Möglichkeit random Werte anzeigen
zu lassen:
https://doc.qt.io/qt-5.12/qtdatavisualization-scatter-scatterdatamodifier-cpp.html
1 | #ifdef RANDOM_SCATTER
|
2 | for (int i = 0; i < m_itemCount; i++) {
|
3 | ptrToDataArray->setPosition(randVector());
|
4 | ptrToDataArray++;
|
5 | }
|
Würde sich random Werte auch auf das Surface-Example anwenden lassen?,
also kann auch eine beliebige Streuung im 3D Raum als Surface angezeigt
werden? und wie würde das funktionieren? Wäre genial wenn dies irgendwie
klappen würde. Danke schon mal für jeden Input, LG