Verfasst am: 05.10.2011, 14:34
Titel: Anwendung von surfnorm, Normalenvektor v. gefitteter Fläche
Hallo zusammen,
ich versuche erst einmal mein Problem kurz zu beschreiben, der vollständige Code ist mittlerweile ziemlich lang und unübersichtlich geworden.
Ich habe 2 Datensätze - Istmess und Sollmessdaten - einer Zahnradflanke, die jeweils die Messpunkte (X,Y,Z) enthalten. Der Istmesssatz enzhält zusätzlich zu jedem Messpunkt den normierten Normalenvektor (xn,yn,zn) mit Länge Fn, die sich aus dem Abstand zu den Sollmessdaten ergibt. Anhand des Normalenvektors ist also die Veränderung der Flanke sichtbar.
Geometrisch bedingt ist der Istmesssatz kleiner als der Sollmesssatz, deswegen möchte ich die fehlenden Punkte erzeugen und generell das Netz etwas verfeinern.
Dazu lege ich mit sfit eine Fläche durch alle Sollmessdaten, eine zweite durch die Istmessdaten und nur die Randwerte der Sollmessdaten.
Durch Funktionen entlang von x und y erzeuge ich mir die noch zu berechnenden Punktpaare und lasse sie über feval berechnen, soweit so gut.
Ich schaffe es allerdings nicht, den surfnorm Befehl zur Berechnung der noch fehlenden Normalenvektoren anzuwenden, was vermutlich an den falschen Dimensionen liegt.
Zitat:
[Nx,Ny,Nz] = surfnorm(X,Y,Z)
surfnorm(Z) and surfnorm(X,Y,Z) plot a surface and its surface normals. Z is a matrix that defines the z component of the surface. X and Y are vectors or matrices that define the x and y components of the surface. Reverse the direction of the normals by calling surfnorm with transposed arguments:
ist mein Ansatz, dabei soll in Spalte 6 bis 8 die jeweilige Richtung abgelegt werden, in Spalte 3 bis 5 ist je Zeile ein Wertepaar (X,Y,Z) hinterlegt.
Dies liefert allerdings den Fehler:
Zitat:
??? Error using ==> surfnorm at 55
Z must be at least 3-by-3.
Muss also Z in einer andern Form vorliegen? Bei Google ist das Thema leider auch nicht sehr verbreitet.
Gleichzeitig hab ich mir noch eine zweite Herangehensweise überlegt, die aber auch noch nicht zielführend ist.
Laut Wikipedia (http://de.wikipedia.org/wiki/Normalenvektor#Fl.C3.A4chen_im_dreidimensionalen_Raum) könnte man ja auch den Gradienten benutzen, wenn ein G(x,y,z) = 0 vorliegt.
Durch sfit erhalte ich ein z = F(x,y), könnte also sagen
G(x,y,z) = F(x,y) -z
damit grad G = dF(x,y)/dx, dF(x,y)/dy, -1 und dann diesen normieren?
So erhalte ich aber ein seltsam Aussehendes Vektorfeld in dem alle Vektoren parallel zu laufen scheinen, oder täuscht das nur?.Den entstehenden Plot hänge ich einmal an.
Ich hoffe das war nicht allzu unklar, sonst gehe ich auf einzelne Punkte gerne noch genauer ein!
Wie immer für jede Hilfe dankbar!
Mittlerweile konnte ich das Problem lösen.
Die von mir angesprochene zweite Methode sollte man vergessen, wenn ich da so drüber nachdenke war das glaub ich mathematischer Blödsinn.
Zu surfnorm:
Meine Daten x,y,z lagen je als Vektor vor, jede Zeile mit 2 Laufindizes (j,i)versehen die die Gitterposition darstellen.
Diese Werte neu in einer Matrix abgespeichert, mit Zeile 1 = j1 und allen zugehörigen i's als Spalte usw. funktioniert und lässt mich über surfnorm die Normalenvektoren berechnen.
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.