Oberfläche aus drei 1D-Arrays erzeugen - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Signaldarstellung (/Forum-Signaldarstellung) +---- Thema: Oberfläche aus drei 1D-Arrays erzeugen (/Thread-Oberflaeche-aus-drei-1D-Arrays-erzeugen) Seiten: 1 2 |
Oberfläche aus drei 1D-Arrays erzeugen - cdegelmann - 02.02.2015 10:44 Hallo zusammen, ich sitze schon seit ein paar Tagen an einem Problem, welches ich bisher nicht wirklich lösen konnte. Ich habe einen XY-Tisch, von welchem ich mir, während einer definierten Fahrt, die X- und Y- Koordinaten rausgeben lasse, welche dann anschließend jeweils in einem 1D- Array angezeigt werden. Zusätzlich habe ich einen Sensor, welcher Abstände messen kann. Dieser gibt mir ebenfalls in Form eines 1D-Arrays die Abstandswerte heraus. Das heißt ich habe für jeden Koordinatenpunkt einen Abstandswert. Die Wertereihe könnte beispielsweise so aussehen: X ------------------ Y ------------------ Z 4,3 ------------------ 5 ------------------ 3,3 4,34 ------------------ 5 ------------------ 3,2 4,6 ------------------ 5 ------------------ 3 4,6 ------------------ 5,3------------------ 2,9 usw. Jetzt möchte ich einen Oberflächengraph mit den vorliegenden Werten erzeugen. Die Punkte lassen sich in einem dreidimensionalen Koordinatensystem problemlos darstellen. Allerdings möchte ich, dass alle Punkte eine Oberfläche generieren. In einem anderen Forum bin ich auf parametrische Oberflächen gestoßen, welche sich auch generieren lassen, allerdings leider keinen wirklichen Bezug zu meinen Messdaten haben. Kann mir jemand sagen, was ich genau tun muss, damit ich aus den Messwerten einen aussagekräftigen Oberflächenverlauf generieren kann? Ich habe keine Ahnung, wie ich die Abstandswerte (Z) so umforme, dass ich sie in einer Matrix darstelle. Gruß Christian RE: Oberfläche aus drei 1D-Arrays erzeugen - GerdW - 02.02.2015 11:23 Hallo Christian, in MATLAB gibt es den Befehl "griddata", der auf Basis von Vektoren x,y,z eine Oberfläche interpoliert. Dieser Befehl wird auch im MathScript-Node von LabVIEW unterstützt und ich habe damit gute Erfahrungen gesammelt. Wenn du also MathScript nutzen kannst, dann probiere das mal aus. Ansonsten gibt es Methoden wie die "Bilineare Interpolation", die du dann selbst auf deine Daten anwenden kannst. Ist halt etwas mehr Programmieraufwand… RE: Oberfläche aus drei 1D-Arrays erzeugen - Lucki - 02.02.2015 13:56 Das ist aber jetzt nicht Dein Ernst, mit den mageren 4 Punkten des Beispiels eine Matrix aufspannen zu wollen? Wenn Du echte Daten posten würdest (am besten in einem VI), hättest Du eine reale Chance, die Aufgabe in Form eines VIs mundgerecht gelöst zu bekommen. Aber so... RE: Oberfläche aus drei 1D-Arrays erzeugen - jg - 02.02.2015 21:07 Wie sieht den das definierte "Raster" aus, welches du abfährst? Die ersten Werte lassen ein "rechteckiges" Raster vermuten... Gruß, Jens RE: Oberfläche aus drei 1D-Arrays erzeugen - cdegelmann - 02.02.2015 22:27 Erstmal vielen Dank für die Antworten! Genau, es wird eine Rechteckfläche verfahren. Dabei wird eine mäanderförmige Verfahrbewegung realisiert. Ich habe natürlich nicht nur 4 Wertepaare, sondern meist mindestens über 1000 pro Messung. Sollte nur als Beispiel dienen. Ich werd mir morgen mal den Befehl aus MATLAB angucken (danke dafür) und gebe dann nochmal Rückmeldung! Außerdem werd ich nochmal in Form eines VI's reale Daten hochladen! (Stimmt natürlich, dass ich das schon eher hätte machen können ) Gruß Christian RE: Oberfläche aus drei 1D-Arrays erzeugen - teegee - 03.02.2015 00:58 Wenn dein Rechteck vollstaendig abgefahren wird so dass du Werte fuer alle moeglichen Kombinationen von X und Y hast, ist das alles ganz einfach. Angenommen deine Vektoren fuer X, Y und Z sehen so aus: X: 0,1,2,2,1,0,0,1,2,2,1,0 Y: 0,0,0,1,1,1,2,2,2,3,3,3 Z: 0,1,0,5,4,2,2,4,5,0,1,0 Dann kannst du Z in einem 2D array darstellen: Z: 0,2,2,0 1,4,4,1 0,5,5,0 Und dann X, Y und Z (2D) in einem 3D Graph darstellen: [attachment=51958] Auf dem front panel sieht das so aus: [attachment=51959] Hier ist das vi: [attachment=51960] RE: Oberfläche aus drei 1D-Arrays erzeugen - GerdW - 03.02.2015 14:21 Hallo Christian, Zitat:So hier hab ich mal eine VI mit den drei 1D-Arrays erstellt, welche ich aus einer Testmessung erhalten habe.Es ist überhaupt nicht nett, Beiträge zurückzuziehen, während andere schon an der Antwort pfriemeln… Außerdem: wenn du jetzt mit LV2013 arbeitest! Und: - Wenn du schon VIs anhängst, dann bitte auch mit den zugehörigen subVIs und aussagekräftigen Daten. - "Klappt nicht" ist keine vernünftige Fehlerbeschreibung, jedenfalls habe ich die noch nie von LabVIEW präsentiert bekommen! - Die Fehlermeldung "Es kam zu Problemen" habe ich auch noch nie von LabVIEW gesehen! (Zumindest nicht ohne weitere Erläuterung!) - "entspricht nicht meinen Vorstellungen" ist auch nicht hilfreich, solange du deine Vorstellungen für dich behälst! - Wenn man auf andere Threads verweist, kann man auch eine Link auf den betreffenden Quell-Beitrag einbetten! RE: Oberfläche aus drei 1D-Arrays erzeugen - cdegelmann - 03.02.2015 14:48 (03.02.2015 14:21 )GerdW schrieb: Hallo Christian, Genau deswegen habe ich den Beitrag entfernt, da ich gesehen habe, dass die VI nicht korrekt dargestellt war. Außerdem wollte ich die Fehler nochmal genauer beschreiben. Hätte nicht gedacht, dass da jemand so schnell ist. Deshalb SORRY von meiner Seite aus Ich stelle die Sachen gleich nocheinmal überarbeitet und in korrekter Ausführung rein. RE: Oberfläche aus drei 1D-Arrays erzeugen - cdegelmann - 03.02.2015 15:36 So nocheinmal vernünftig: Bei der Nutzung des Math-Skript Nodes wurde mir direkt die Fehlermeldung von LabVIEW herausgegeben, dass nicht genügend freier Speicher zur Verfügung steht. Deshalb denke ich, dass die Datenmengen einfach zu groß sind. Das selbe Problem ereignet sich bei dem Lösungsvorschlag von teegee, denn auch dort wird mir in einer Fehlermeldung mitgeteilt, dass zu wenig Speicher vorhanden ist. Ich habe als Beispiel mal ein Unterprogramm "Oberflächengraph drei 1d arrays" vorbereitet, in welchem drei 1D-Arrays vorhanden sind, welche ich aus einer Messung erzeugt habe. In einem anderen Forum habe ich eine UnterVI entdeckt, welche die Bildung von parametrischen Oberflächen ermöglicht. Diese VI "parametrische Oberfläche" habe ich mit in den Anhang gepackt, da ich diese in der BeispielVI "Oberflächengraph drei 1d arrays" nutze. Der dort entstandene Graph interpoliert die Messdaten zu stark, deshalb hat die erzeugte Oberfläche kaum noch einen Bezug zu meinen Messdaten. Deshalb bin ich auf der Suche nach einer Möglichkeit einen genaueren Oberflächengraph zu erstellen. Am besten wäre eine erzeugte Oberfläche, welche gar nicht interpoliert wird, da die Auflösung des Sensors 60nm beträgt. Ich hoffe ich konnte mein Problem erläutern. Vielen Dank im Voraus! Gruß Christian RE: Oberfläche aus drei 1D-Arrays erzeugen - GerdW - 03.02.2015 15:42 Hallo Christian, es fehlen immer noch subVIs aus deinem "download"-Ordner... Zitat:Am besten wäre eine erzeugte Oberfläche, welche gar nicht interpoliert wird, da die Auflösung des Sensors 60nm beträgt.Über welchen Messbereich reden wir hier, wenn es bei dir zu "Out of Memory"-Fehlern kommt? Wie viele Messwerte hast du in einer Messreihe? Ich sehe gerade: du hast ~29000 Elemente in deinen Arrays. Du willst also eine Fläche aus 29*29*10^6 Punkten = 841Mio Punkten erstellen? Jeder Z-Wert wird als DBL berechnet und belegt 8Byte im Speicher. Du brauchst also 8*841Mio = 6.266GiB Speicher. Hast du soviel im Rechner? Kann dein LabVIEW überhaupt mit dieser Datenmenge umgehen (Stichwort 32bit vs. 64bit)? |