Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 10, 2025 22:56

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Hesse-Normalen-Form auswerten
BeitragVerfasst: Fr Nov 24, 2006 14:54 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Mär 09, 2005 15:54
Beiträge: 372
Wohnort: München
Programmiersprache: Delphi, C#, FPC
Ich habe da mal ein kleines mathematisches Problem:

Ich habe einen Punkt p und einen Normalenvektor n einer Ebene e. Somit hab ich ja auch die Hesse-Normalen-Form:
n1(x) + n2(y) + n3(z) - [n1(px) + n2(py) + n3(pz)] = 0

Der Punkt p soll der Mittelpunkt eines Quadrates sein, dass ich um den Punkt p spannen will. Jeder Eckpunkt soll dabei den gleichen Abstand zum Punkt p haben (ist ja logisch, wenn der Punkt der Mittelpunkt seien soll). Das Quadrat soll dabei noch in der Ebene e liegen.
Mein Problem ist jetzt: wie komme ich auf die Eckpunkte dieses Vierecks?

Man könnte natürlich die Hesse-Normalen-Form nehmen und alle möglichen Punkte überprüfen, ob sie in der Ebene e liegen, aber das wäre wohl nicht so ganz das gelbe vom Ei.

Ich kann mir schon vorstellen, dass die Lösung ganz einfach ist und ich mir erstmal eine Platzwunde zuziehe, sobald ich die Lösung habe, nur ich hab da im Moment ein ziemliches dickes Brett vorm Kopf.

_________________
Aktuelles Projekt: Gael - Development Blog
Website: LightBlackSoft.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 24, 2006 15:23 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Das Problem ist, dass es mit dieser Angabe unendlich viele Lösungen gibt. Sagen wir du hast einen Stift (Normalvektor) und du legst da ein quadratisches Blatt Papier drauf, so dass der Mittelpunkt auf der Stiftspitze liegt. Nun kannst du das Papier beliebig drehen. Du benötigst also zusätzlich noch eine Information über die Drehung des Quadrates, oder aber es ist dir egal.

Wenn es dir egal ist wie es gedreht ist, so würde ich sagen du nimmst dir als Hilfsmittel einen beliebigen Vektor, sagen wir mal dummy = (0|0|1).
Wenn du nun das Kreuzprodukt zwischen dummy und deinem Normalvektor bildest:
V1 = N X dummy
so erhältst du einen Vektor auf deiner Ebene. Wenn der Betrag von V sehr klein (oder ganz 0) wird bedeutet dies, dass der dummy ähnlich zum Normalvektor ist (entweder in die gleiche Richtung oder in die entgegengesetzte Richtung). Du brauchst also nun einen Plan B und dieser könnte so aussehen, dass du einen anderen dummy an nimmst, also Ersatzdummy = (0|1|0).
Den Vektor V1 solltest du nun Normalisieren (also auf Länge 1 bringen) und dir einen Vektor V2 folgendermaßen berechnen:
V2 = V1 X N
wodurch V2 ebenfalls auf der Ebene liegt und sowohl zum Normalvektor als auch zu V1 senkrecht steht. Wenn du auf die sichere Seite bzgl. Rundungsfehlern und so willst V2 auch noch normalisieren und dir dann das Quadrat aufspannen:
Eckpunkt1 = P + k*V1
Eckpunkt2 = P + k*V2
Eckpunkt3 = P - k*V1
Eckpunkt4 = P - k*V2
Wobei k die größe des Quadrates ist und P der Mittelpunkt.

Wenn es dir nicht egal ist wie das Quadrat gedreht ist, dann benötigst du noch irgendwelche weiteren Informationen die du in irgend einen mathematischen Ausdruck packen musst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 25, 2006 19:43 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Mär 09, 2005 15:54
Beiträge: 372
Wohnort: München
Programmiersprache: Delphi, C#, FPC
Danke erstmal für die Antwort.

Aber mit den von mir gegebenen Sachen (Punkt p, welcher der Mittelpunkt des Quadrates ist; Normalenvektor n, der die Ausrichtung der Ebene angibt, in der das Quadrat liegt) kann man das Quadrat nicht beliebig drehen. Um eine Ebene zu definieren brauche ich nur einen Punkt und einen Normalen-Vektor. Und wenn ich weiß, dass das Quadrat in dieser Ebene liegt, kann man dieses auch nur sehr schwer drehen.

_________________
Aktuelles Projekt: Gael - Development Blog
Website: LightBlackSoft.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 25, 2006 22:09 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
P = (0|0|0)
Normalvektor = (0|0|1)

Nach deiner Angabe gültiges Quadrat:
1.Ecke = ( 1 | 1 | 0 )
2.Ecke = ( 1 | -1 | 0 )
3.Ecke = ( -1 | -1 | 0 )
4.Ecke = ( -1 | 1 | 0 )

Quadrat um 45 Grad gedreht, welches ebenfalls deiner Angabe entspricht:
1.Ecke = ( 1.414 | 0 | 0 )
2.Ecke = ( 0 | 1.414 | 0 )
3.Ecke = ( -1.414 | 0 | 0 )
4.Ecke = ( 0 | -1.414 | 0 )


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 26, 2006 00:25 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Mär 09, 2005 15:54
Beiträge: 372
Wohnort: München
Programmiersprache: Delphi, C#, FPC
Jetzt versteh ich erst, was du mit Rotation meinst, hab was anderes gedacht.

Aber jetzt versteh ich, dass du das Quadrat um den Normalenvektor rotiert hast. Mein Brett vorm Kopf hat sich erst jetzt gelöst. Danke, das war genau das was ich gesucht habe...

_________________
Aktuelles Projekt: Gael - Development Blog
Website: LightBlackSoft.com


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 17 Queries | GZIP : On ]