ich habe momentan folgende Aufgabe: ich möchte zu verschiedenen Oberflächen die Surface Normals bestimmen. Hierzu gibt es in Matlab eine Funktion surfnorm (http://www.mathworks.de/de/help/matlab/ref/surfnorm.html).
Als zweite Variante nutze ich einen in diesem Forum vorgestellten Algorithmus (http://www.gomatlab.de/normalenvektor-einer-flaeche-surface-bzw-mesh-berechnen-t5554.html).
Jetzt liefern mir jedoch beide Varianten bei unterschiedlichen Flächen unterschiedliche Ergbebnisse. Im Anhang befindet sich eine Darstellung von 2 unterschiedlichen Flächen mit den jeweiligen Ergebnissen.
Die erste Fläche ist eine schiefe Ebene mit einer Steigung von 45°, bei der zweiten Fläche besteht die Grundform aus dem positiven Anteil einer sinus-Funktion. Links ist jeweils das Ergebnis des Algorithmus, rechts das der Matlab-Funktion dargestellt.
Kann mir hier jemand helfen, warum ich auf so unterschiedliche, und zumindest für die schiefe Ebene in beiden Fälllen falsche Lösung komme?
Ich habe vor in Zukunft mit Freiformflächen zu arbeiten und benötige hierfür einen sicheren Algorithmus.
hier nun der dementsprechende Auszug aus meinem Quellcode (angepasst an das beiligende Datenfile), die Funktion SurfaceNormals kann aus dem Link meines ersten Posts übernommen werden.
Ich habe keine Ahnung, ob dies Dein Problem betrifft und ich habe gerade keinen Zugriff auf Matlab, aber ich hatte mal Probleme mit falschen Normalen in der Darstellung. Dies konnte behoben werden mit: http://www.mathworks.com/matlabcentral/fileexchange/23882-surfo.
aus den Werten des Normalenvektors den Winkel in Grad, so erhalte ich je nach Methode 45 bzw. 135 Grad, sodass hier nur die Darstellung leich falsch ist, die Berechnung jedoch stimm.
Versuche ich das ganze für den Bogen, so bekomme ich immer noch falsche Werte.
Versuche ich das ganze für den Bogen, so bekomme ich immer noch falsche Werte.
Das ist zu allgemein formuliert. Kannst Du den Code posten? Falls dieser einen Bug enthält, kann man ihn nicht finden, solange man nur die Beschreibung als Text sieht.
Was sind eigentlich genau die Normalen eines Surface-Objektes? Jede Teilfläche besteht ja aus Dreiecken. Die Normalen sind dann die Kreuz-Produkte von jeweils zwei Seiten. Wenn man das Surface-Objekt aus Vierecken aufbaut, wäre das Kreuzprodukt der beiden Diagonalen sinnvoll, obwohl dies im Allgemeinen nicht mit den Normalen der Unterdreiecke übereinstimmen wird. Die Normalen in den Eckpunkten sind auch nicht eindeutig definiert.
Dies kann aber nicht zu so krassen Fehlern führen wie in deinem geposteten Bild, bei dem die Normalen der Parabel alle genau in Z-Richtung zu wiesen scheinen. Das ist wohl ein Bug.
um mir aus den Normalenvektoren den Winkel zwischen x- und z-Achse zu berechnen.
mache ich dies für meine schiefe Ebene, so erhalte ich bei beiden Arten der SurfaceNormals berechnung richtige Werte (45 und 135°, was je nach Definition des Winkels beides richtig ist).
Versuche ich das ganze bei dem Bogen (txt-file hängt an anderem Beitrag an), so bekomme ich Winkel zwischen -5 und 5° (für beide Berechnungsarten), obwohl diese Graphisch etwas anderes ausgeben und ich größere Winkel erwarte (in x-z Richtung).
Was ich benötige sind die Normalenvektoren meiner einzelnen Punkte, um mir hieraus die Winkelverschiebungen gegenüber der einzelnen Achsen zu berechnen. Das ich hierbei aufgrund der Rechenvorschriften die Randpunkte verliere, ist momentan eher Nebensache.
ich glaube du hast ein Skalierungsproblem. Wenn du dir mal deine Kurve in allen Achsen mit dem gleichen Maßstab anschaust siehst du, dass der Winkel auch nur max. 5 Grad betragen kann.
Betrachtet man für beide Berechnungsvarianten die Ausgabe, so sieht man bei den blauen Normalenvektoren, dass die +/- 5° um die Z-Achse jeweils stimmen könnten, betrachte ich jedoch die roten Normalenvektoren, so handelt es sich zumindest in der graphischen Ausgabe nie um +/- 5° sondern eher um +/- 80°, (also der Bereich des Winkels zwischen Z-Achse und Vektor)
wo soll es sich hier um ein Skalierungsproblem handeln?
...bei den roten könntest du recht haben! Aber auch hier würde ich mich nicht auf die graphische Darstellung verlassen. Schau dir die Normalenvektoren numerisch an, ob die passen oder auch nicht.
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.