Gradient benutzen, um Normalvektor zu berechnen

Neue Frage »

NilsJ Auf diesen Beitrag antworten »
Gradient benutzen, um Normalvektor zu berechnen
Meine Frage:
Hallo,
Ich habe einen Punkt auf einer nicht Runden Kugel(wie ein Planet z.B.) und den Gradienten zu diesem Punkt.

Ist es Möglich mit diesen gegebenen Informationen die Normale des Punktes zu berechnen?
Hier wird das genau beschrieben, ich verstehe es aber nicht...
https://math.stackexchange.com/questions...isplaced-sphere

Meine Ideen:
Der Gradient gibt ja die Richtung mit der grössten Steigung an. Also müsste dann davon die Tangente berechnet werden können. Sowie die Normale
Huggy Auf diesen Beitrag antworten »
RE: Gradient benutzen, um Normalvektor zu berechnen
Zitat:
Original von NilsJ
Ich habe einen Punkt auf einer nicht Runden Kugel(wie ein Planet z.B.) und den Gradienten zu diesem Punkt.

Ist es Möglich mit diesen gegebenen Informationen die Normale des Punktes zu berechnen?

Ja.

Wie das geht hängt allerdings davon ab, in welcher Form die unrunde Kugel, allgemeiner die Fläche im , gegeben ist.

(1) Die Fläche sei durch



gegeben. Dann ist der Gradient von



schon ein nicht normierter Normalenvektor der Fläche.


(2) Die Fläche sei in parametrisierter Form



mit ) und als Parameter gegeben. Dann ist der Gradient von



ein Paar von Vektoren, die eine Tangentialebene an die Fläche in dem betrachteten Punkt aufspannen. Ein nicht normierter Normalenvektor in diesem Punkt ist dann durch



gegeben.
Leopold Auf diesen Beitrag antworten »

NB. Und warum wurde das unter Schulmathematik verschoben? In welchem Bundesland unterrichtet man mehrdimensionale Analysis in der Schule?

Ja, sorry. Ich hab nur "Kugel" und "Normalvektor" gelesen und das war für mich Vektorrechnung im R³, was halt in Geometrie gehört. Steffen

NilsJ Auf diesen Beitrag antworten »

danke für die schnelle Antwort.
Es handelt sich um einen Ikosaeder der sich im Ursprung befindet. Wie gesagt habe ich den Gradient für den gegebenen Punkt bereits.

Der Vektor ist ein Punkt auf dem Ikosaeder den ich mit um einen Wert in Richtung der ursprünglichen Normalen verschiebe.

ist ein Konstanter Radius




Ich steh gerade auf dem Schlauch...
Huggy Auf diesen Beitrag antworten »

Zitat:
Original von NilsJ
Es handelt sich um einen Ikosaeder der sich im Ursprung befindet. Wie gesagt habe ich den Gradient für den gegebenen Punkt bereits.

Was soll das heißen? Der Gradient ist in der Mathematik ein Operator, der auf eine Funktion angewendet wird. Von welcher Funktion hast du den Gradienten?

Zitat:
Der Vektor ist ein Punkt auf dem Ikosaeder den ich mit um einen Wert in Richtung der ursprünglichen Normalen verschiebe.

ist ein Konstanter Radius


Das ist ziemlich unverständlich. Wenn x ein Ortsvektor eines Punktes auf einem Ikosaeder sein soll, dann braucht man eine Darstellung von x auf der betrachteten Teilfläche des Ikosaeders..

Und was ist der Unterschied zwischen f(x) und F(x)?
Leopold Auf diesen Beitrag antworten »

Das Ikosaeder läßt sich gut in Koordinaten beschreiben. Man steckt drei kongruente Rechtecke, deren Seiten im Verhältnis des Goldenen Schnitts zueinander stehen, im Raum zyklisch symmetrisch ineinander. Die zwölf Ecken der Rechtecke bilden die zwölf Ecken des Ikosaeders. Jede Ecke eines Rechtecks wird über die kurze Kante mit der nächstliegenden Ecke des eigenen Rechtecks und durch den Raum mit den vier nächstliegenden Ecken der beiden anderen Rechtecke verbunden, und schon ist das Ikosaeder fertig.

Machen wir es konkret: Die Seiten des Rechtecks seien und mit . Im Folgenden sind alle Vorzeichenkombinationen erlaubt. Die zwölf Ecken sind dann



Mit Hilfe der Ecken lassen sich alle Kantenvektoren ermitteln und über das Vektorprodukt alle Normalenvektoren der Dreiecksflächen. Falls das überhaupt gemeint ist, was NilsJ sucht. (Insofern hätte Steffen gar nicht so weit danebengelegen mit der Zuordnung dieser Aufgabe zur Geometrie.)

Aber vielleicht will NilsJ auch etwas ganz anderes, kann es aber noch nicht richtig vermitteln.
 
 
NilsJ Auf diesen Beitrag antworten »

Mein Fehler. Derivative im Englischen. Und ein Tippfehler f(x) und F(x) ist das selbe.
Ich glaube ich habe zu viel im Englischen davon gelesen Hammer

Habt ihr den Link angeguckt?

Die Flächen des Ikosaeders sind so oft geteilt worden, dass er aussieht wie eine Kugel.

Mit f(x) ist hier 3D Simplex Noise gemeint. Man gibt einen Vektor in die Funktion und bekommt dazu einen Wert zwischen 0 und 1 in diesem Fall. Zusätzlich wird ein Vektor berechnet der die 3 Derivatives enthält.
Huggy Auf diesen Beitrag antworten »

Zitat:
Original von NilsJ
Habt ihr den Link angeguckt?

Habe ich. Es gibt Unterschiede zwischen dem dortigen (ein Einheitsvektor) und deinem , was, wenn ich dich richtig verstehe, ein Vektor ist, der auf einen Punkt einer Seitenfläche eines Ikosaeders zeigt. Außerdem unterscheidet sich die Beziehung zu etwas von deiner Beziehung. Aber das ist nicht von großer Bedeutung. In dem Link hat man für eine Parameterdarstellung erzeugt mit den beiden Winkeln von Kugelkoordinaten als Parameter und daraus den Normalenvektor gewonnen, wobei ich mir die Details der Ausführung nicht angesehen habe. Wenn man einen Ikosaeder deformiert, erscheint es mir einfacher, von einer üblichen Parameterdarstellung einer Fläche auszugehen. Sei also:





Den Faktor bei dir habe ich weggelassen. Der ist aber leicht zu integrieren. Aus dem Beitrag von Leopold siehst du, wie man für eine Ikosaederfläche gewinnt. Jetzt kann man die Standardprozedur für eine parametrisierte Fläche anwenden, die ich oben angegeben habe.

Sei zunächst . Dann hat man eine nicht deformierte Seitenfläche. Es ist dann und man hat:







Jetzt nehme ich mal als Beispiel



Also



Jetzt berechnet man und mit der Produktregel und dann wieder über das Vektorprodukt . Es sollte daraus klar sein, wie man für andere Funktionen vorgeht.

Zitat:
Die Flächen des Ikosaeders sind so oft geteilt worden, dass er aussieht wie eine Kugel.

Mit f(x) ist hier 3D Simplex Noise gemeint. Man gibt einen Vektor in die Funktion und bekommt dazu einen Wert zwischen 0 und 1 in diesem Fall. Zusätzlich wird ein Vektor berechnet der die 3 Derivatives enthält.

Das hat nur tiefe Verwirrung bei mir hervorgerufen.
NilsJ Auf diesen Beitrag antworten »

Hallo Huggy,
vielen Dank für die Erklärung. Ich werde versuchen das später auszuprobieren smile
NilsJ Auf diesen Beitrag antworten »

Hab es so nicht hinbekommen, der Normalvektor der berechnet wird zeigt seltsamerweise nicht in die richtige Richtung. Die Richtung aller Normalen ist willkürlich verschoben warum auch immer...

Ich habe jetzt Versucht wie in dem Link die Normale zu berechnen.
Da die Ikosaederflächen sehr oft geteilt wurde kann man einfach davon ausgehen, dass man eine Einheitskugel hat.
Somit ist

Ich versuche mal meine Vermutung zu erläutern:

der Vektor zeigt in die Richtung des größten Anstiegs.

Kann man das folgende anders formulieren?


Der Normalvektor kann dann so berechnet werden:


Hab mir das so aus dem Link zusammen gesucht. Hab jetzt noch nicht konkret versucht das so im Shader zu testen. Wollte erst von jemandem, der sich besser auskennt, wissen ob da so möglich ist.
Huggy Auf diesen Beitrag antworten »

Das ist die Variante der ersten Antwort aus dem Link und sollte richtig sein.
NilsJ Auf diesen Beitrag antworten »

ok, vielen Dank smile
NilsJ Auf diesen Beitrag antworten »

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
float3 grad;
float noise = getNoiseValue(TriPos, grad);
float3 nTriPos = normalize(TriPos);
grad = grad / (40000.f * (1.f + noise));
float3 h = grad - dot(grad, nTriPos) * nTriPos;

float3 n = nTriPos - (40000.f * h);

traurig
Es geht nicht
Die Normalen zeigen fast in die richtige Richtung, ich verstehe jetzt gar nichts mehr... Hammer
Huggy Auf diesen Beitrag antworten »

Dazu kann ich nichts sagen. Vielleicht liegt es daran, dass der unterteilte Ikosaeder (was immer das sein mag) halt keine exakte Kugel ist.
NilsJ Auf diesen Beitrag antworten »

Du hast recht. Mit einem Einheitskreis funktioniert es Freude
Vielen Dank nochmal smile
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »