PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Aus 3D-Normalen-Vektor ursprüngliche Ebene ermitteln?


nobody
03.07.2003, 14:57
Hallo,


Ist es möglich aus einem 3D Normalen-Vektor
die ursprüngliche Fläche (z.B. Dreieck,Quadrat,...), aus dem der Normalen Vektor gebildet wurde, zu ermitteln.

Es wäre nur die Lage im Raum wichtig.
Entweder die Rotatationswinkel für x,y,z.
Oder ein Algo wie ich auf die Punkte für ein Dreieck oder Quadrat
komme.

Ich hab schon einiges probiert, aber bin leider auf keine Lösung gekommen. Vielleicht kann mir hier jemand weiterhelfen.

Bin für Anregeungen und Lösungsvorschläge sehr Dankbar

MfG

Andre

Tomboy
03.07.2003, 15:05
Meines Wissens kommst du vom Normalenvektor nur dann auf eine Ebene, wenn du zusätzlich noch einen Punkt der Ebene gegeben hast. Sonst könnte der Vektor ja überall sein und die Ebene entsprechend auch...
Ich hoffe, ich habe deine Frage nicht missverstanden. ;) :silly:

nobody
03.07.2003, 15:19
Hi TomBoy


Immerhin weisst du schon mehr als ich.

Aber der Normalen Vektor hat doch auch eine Lage im Raum. Die muss doch irgendwie invertierbar sein. Die Fläche zum Normalenvektor sollte ja im 90 Grad Winkel stehen. Ich hab da z.B. die Winkel zu den x,y,z Achsen von der Normalen bestimmt. Aber hat nich ganz geklappt.

Aber vielleicht kannst du mir ja den Weg mit dem zus. Ebenen Punkt mal näher erläutern.

Andre

Tomboy
03.07.2003, 15:46
Ich glaube jetzt, dass wir beide etwas anderes wollen. Ich dachte zuerst, du willst eine bestimmte Ebene haben, aber das ist es wohl nicht. Dazu würdest du die Normalenform der Ebenengleichung bilden (nxx+ nyy+ nzz= r für n= (nx|ny|nz) ) und durch Einsetzen des Punktes r bestimmen (kennst du sicher).

Wenn dich allerdings nur die relative Lage im Raum interessiert, ist das was anderes. Wenn du schon die Winkel mit den Koordinatenachsen ausgerechnet hast, was hat denn da nicht geklappt?

nobody
03.07.2003, 16:14
Hallo TomBoy,

Ersteinmal Danke für deine schnelle Hilfe. Ist nicht überall so.

OK

Das Problem ist das sich die Lage der Ebene in Zusammenhang mit der Reihenfolge der Rotationen (x,y,z) scheinbar ändert. Ich kann nicht genau determinieren wann ich zu erst x,y,z drehen muss usw...

Dadurch springt meine Ebene ziemlich rum und ist nicht eindeutig. Ich konnte leider noch keine Struktur erkennen. Am heftigsten zu erkennen ist es bei einer Kugel.

Wenn ich kurz mal erkläre was ich will gibts ja vielleicht noch andere Ansätze.

Also ich hab eine 3D Kugel die aus n-Dreieck-Stücken besteht. Ich habe zu jedem Dreieck eine Normale definiert. So nun ist es mein ziel durch x-y translation auf der Kugel Oberfläche "entlangzufahren". Meine Ebene (Rechteck) mit der ich das mache, soll sich immer zu der Dreieck Normalen ausrichten. Also schauen sich Dreieck und Ebene gegenseitig an. So nun will ich wissen wie ich die plane Ebene (z=0) so rotiere das Sie sich genau so ausrichtet.

Also eigentlich kein grosses Ding, aber da hackt was.


MfG

Andre

Tomboy
03.07.2003, 16:21
:dizzy: Sorry, mit Rotationen und so Zeugs hatte ich bisher fast nichts zu tun, geschweige denn, dass ich daran schon was gerechnet hätte... Kannst du ein paar Gleichungen und/ oder Rechnungen posten? Dann könnte ich versuchen, mich da reinzufinden und was darüber zu lernen.

TheoChem
03.07.2003, 16:57
Hallo bytetrasher,
willkommen im Forum! :) Ich bin zwar auch ziemlich neu hier, aber ich hoffe, ich kann dir mit Folgendem helfen:
Ermittele zwei beliebige Senkrechten auf der gegebenen Normalen im Anfangspunkt der Letzteren. Spanne durch beide Senkrechten eine Ebene auf, in der beide liegen. Diese Ebene ist die Gesuchte.

Tomboy
03.07.2003, 17:04
Stimmt schon, aber dabei wirst du in der Ebenengleichung immer eine zusätzliche Unbekannte behalten. Die Ebene ist nicht eindeutig festgelegt, man hat gewissermaßen eine Ebenenschar von parallelen Ebenen.

nobody
03.07.2003, 17:08
Hallo TomBoy,

Werde ich gerne tun,

Also ich hab meine Normale n=(x,y,z);

So nun ermittle ich die Winkel zu den Einheitsvektoren
Ex,Ey,Ez der Koordinatenachsen

Ex = (1,0,0)
Ey = (0,1,0)
Ez = (0,0,1)

Dazu spanne ich ein Dreieck zwischen den Korrospondierende Punkten auf. Danach wende ich simple trigonometrische Funktionen an um auf die Winkel zu kommen.

bei mir:

bestimme a,c des Dreickecks
winkel(rad) = acos(a/c)
winkel(deg) = 180*winkel(rad)/PI

So das mache ich mit allen 3 Koordinatenachsen
Somit erhalte ich die Winkel für x,y,z;

Danach wende ich folgende einschlägigen Formeln für die
Rotation nach Euler an um von meinen Quellpunkten der Ebene
zu den rotierten Zielpunkten zu gelangen.

Rotation um die X-Achse
zielP_y = cos(wx) * orgP_y - sin(wx) * orgP_z;
zielP_z = sin(wx) * orgP_y + cos(wx) * orgP_z;

Rotation um die Y-Achse
zielP_z = -sin(wy) * orgP_x + cos(wy) * orgP_z;
zielP_x = cos(wy) * orgP_x + sin(wy) * orgP_z;

Rotation um die Z-Achse
zielP_x = cos(wz) * orgP_x - sin(wz) * orgP_y;
zeilP_y = sin(wz) * orgP_x + cos(wz) * orgP_y;


Das allg. Problem bei der Euler-Rotation ist die Reihenfolge der Rotationen.

Also muss das Ziel meiner Frage nun lauten:

Wann drehe ich welchen Winkel zu erst in Abhängigkeit des Normalenvektors? Auf welche Bedingungen oder sonstiges muss
man schauen um zu determinieren wann ich welchen Winkel drehe?

Ja also, wenn das mal keine Aufgabe ist. :)

Im Netz hab ich nischt dazu gefunden.

Eigentlich ist die Rotation auch keine grosse Sache aber halt die Reihenfolge im 3D-Raum ist zumindestens bei mir schon ein ganz schönes Ding.

Naja OK.Genug geschrieben. Wenn dir was unklar sein sollte gib ne Nachricht.

Ansonsten wünsch auch ich dir viel spass beim Knobeln ;)



MfG

Andre

nobody
03.07.2003, 17:24
Hallo TheoChem,

Diese Schar von parallelen Ebenen ist somit Entfernungsunabhängig wenn ich das richtig verstanden habe, kann also eine beliebige Entfernung zu der ursprünglichen haben?

Wäre ja auch nicht verkehrt. Na ich muss jetzt erstmal offline gehen.
werd mich heut abend nochmal melden. Ich schau mir das mal genauer an
und ich glaube das lässt sich auf die ein oder andere Weise schon lösen

Dank an euch beide für diese rasche Hilfe!! Hab viele neue Ideen im Kopf ( programmiere die ganze geschichte )


Bis später


Andre

TheoChem
03.07.2003, 18:30
Wenn der Anfangspunkt der Normale ( der auf der Ebene liegt :attention: :confused: ), bekannt ist, ist IHMO die Ebene eindeutig bestimmt ;) .

Tomboy
03.07.2003, 22:40
@TheoChem: natürlich, aber soweit ich das mitbekommen habe, ist der Anfangspunkt des Normalenvektors nicht bekannt, daher ist die Ebene auch nicht eindeutig bestimmt.

@bytetrasher: tut mir leid, das ist mir noch zu hoch. Ich muss mich erstmal im Internet umschauen, was zu Rotation so alles gehört und mich über Euler-Rotation und sowas informieren. Wenn ich mehr weiß, melde ich mich wieder.

nobody
04.07.2003, 14:55
Hallo TomBoy und TheoChem


->TomBoy:: Kein Ding. Das mit den Rotationen ist ja nicht weiter schwer aber die Bedingungen sind ziemlich einengend. Und nochwas zu den Anfangspunkt der Normalen. Die ist bekannt.
Ich hätte vielleicht dazu sagen müssen das ich die Ursrungsebene ja auch kenne vorraus die Normal stammt.

->TheoChem:: Du hast Recht. Die Ebene ist mir bekannt. Eigentlich muss ich diese ja nur parallel entlang der Normalen verschieben.Im Endeffekt.Jedoch da wir ja schon mal bei sind. Es wäre dennoch schön zu wissen ob man trotzdem die Reihenfolge der Rotationen irgendwie bestimmen kann. Dann könnte man z.B die Rotationen Interpolieren, wenn man genau weiss wie die Ebene rotiert werden muss.

Vorläufig ist mein Problem erstmal gelöst. :)

Dank an euch beide!!


Bis zum nächsten mal

Andre

Tomboy
04.07.2003, 15:04
Achso, dann hatte ich wohl was überlesen... :silly:

Originalnachricht erstellt von bytetrasher
Also ich hab eine 3D Kugel die aus n-Dreieck-Stücken besteht. Ich habe zu jedem Dreieck eine Normale definiert. So nun ist es mein ziel durch x-y translation auf der Kugel Oberfläche "entlangzufahren". Meine Ebene (Rechteck) mit der ich das mache, soll sich immer zu der Dreieck Normalen ausrichten. Also schauen sich Dreieck und Ebene gegenseitig an. So nun will ich wissen wie ich die plane Ebene (z=0) so rotiere das Sie sich genau so ausrichtet.

Ich verstehe noch nicht ganz, was da genau ablaufen soll. Wenn ich mich richtig informiert habe, ist doch Translation eine gewöhnliche geradlinige Verschiebung, oder?
Und du gehst von einer dieser Dreiecksflächen aus, die die Kugel bilden und willst dan durch Rotation auf alle anderen Flächen kommen? ist das soweit richtig?

nobody
04.07.2003, 16:11
Hallo TomBoy,

Nicht ganz,

Stell dir einen Satelliten vor der um die Kugel schwebt und immer in Richtung Oberfläche (Dreieck) schaut. Einen Punkt auf einer Kugel kann man auch mit Längen und Breitengrade beschreiben (also x-y). R der Radius bleibt ja konstant. Ich will ja nur auf der Oberfläche "langwandern" und nicht in die Kugel stürzen. Ja ich gehe dann von einem Dreieck aus. Vorher habe ich Nachbarschaftbeziehungen für jeden einzelnen Punkt berechnet. Somit kann ich dann gegebenermassen durch x,y auf der Kugel "entlangwandern" Problem halt nur das sich der Satellit auf die Fläche ausrichten soll.

Ich werde einfach die Ursprungsfläche kopieren,skalieren und in ein Rechteck umwandeln und entlag der Normale parallel verschieben. Das müsste eigentlich gehen.

Wie gesagt es wäre ja nicht schlecht zu wissen ob man die Fläche nicht doch durch einfache Rotation dazu bringen kann genau die Lage anzunehmen die die Ursprungsfläche besitzt.


Andre

Tomboy
04.07.2003, 16:36
Ach so also stehen die x- und y-Koordinaten für das Gradnetz der Kugeloberfläche... Was für eine Koordinate ist dann z?
Du lässt also sozusagen den Satelliten um die Kugel rumfliegen und willst durch die Rotation die Fläche berechnen, auf die der Satellit nach der Bewegung ausgerichtet ist? Ich nehme mal an der Satellit "guckt" immer in senkrechter Richtung zur Kugeloberfläche?

TheoChem
04.07.2003, 17:26
Hallo Tomboy,

z ist die Flughöhe des Satelliten über der Kugeloberfläche. Das Ganze nennt man (glaub' ich ;)) ein Kugelkoordidatensystem. :)

Tomboy
04.07.2003, 17:45
Aha. Und du bewegst den Satelliten um einen bestimmten Winkel um die Kugel herum (bei konstanter Höhe z?) und willst dann wieder die entsprechende Fläche auf der Kugel berechnen? Geht es dann dabei um eine Art Tangentialfläche oder liegen nur die Eckpunkte des Dreiecks oder Rechtecks oder was auch immer auf der Kugel selbst?

nobody
07.07.2003, 13:22
Hallo TomBoy

Das kann ich dir auch nicht beantworten ob es etwas mit Tangenten zu tun hat.Bis jetzt brauchte ich sie nicht. Die Dreiecke liegen auf der Kugel bzw bilden die Oberfläche.

Jedenfalls geht es hier nur ums Prinzip. Ich gehe nicht davon aus das mein Objekt auf dem Ich "langwandere" eine eindeutig ideal definierte Kugel ist. Es sollte jede beliebige Oberfläche sein können. Hauptsache sie ist zusammenhängend. Dadurch das ich nachbarschaftsbeziehungen aufgebaut habe kann ich genau wie bei einer Kugel einen Punkt auf der Oberfläche mit x,y beschreiben.

Ich bewege nicht den Satelliten um einen bestimmten Winkel, sondern ich bewege mich auf der Oberfläche ein Stück weiter(x-y) und würde dann die Rotationswinkel für den Satelliten neu bestimmen. Neue Position (im Raum) des Satelliten wäre dann ein Punkt auf der Normalen des neuen Punkts. Orientierung der neuen Fläche wird durch die Rotationswinkel beschrieben.

Wie gesagt hört sich alles schön an. Aber so lange ich die Reihefolge der Rotationen nicht berechnen kann, bringt mir das wenig.

Andre

doppelelch
07.07.2003, 14:18
Ich habe die ganze Diskussion jetzt nur sehr am Rande verfolgt und mir ist auch noch reichlich schleierhaft, wie Du Dir das alles vorstellst! Was genau soll rotieren? Was soll sich bewegen? Worum rotieren, worauf bewegen? Von welchem "Rechteck" ist die Rede, welches "das Dreieck anschaut"?

Noch eine Frage: Handelt es sich um eine kreisförmige Rotationsbewegung im R^3? Dies ließe sich vektoriell sehr schnell und einfach auch ohne die Hilfskonstruktionen von Dreiecksebenen bemühen zu müssen?
Mir scheint, es geht um zwei Bewegungen.

1. Eine Translationsbewegung (eines Punktes? des Normalenvektors? einer Fläche?) auf einer Dreiecksfläche, die Teil eines Polyeders (?)ist.

2. Eine Wechsel von Dreiecksfläche zu Dreiecksfläche des Polyeders der durch eine Art Rotationsbewegung modelliert werden soll (ab wann? Mittel- bzw. Schwerpunkt zu Schwerpunkt oder ein "über die Kante kippen" oder, oder, oder?)


Du siehst, es sind noch etliche Fragen offen.
Wenn Du präzisierst, wie genau Du Dir das eigentlich vorstellst, was genau Du willst, kann ich Dir womöglich sogar helfen. Aber so ist mir das noch etwas sehr wirr. Mir scheint, ich spreche da auch in tomboys Namen.


Gruß
de

nobody
07.07.2003, 16:06
Hallo Doppelelch,

Danke für dein Hilfeangebot. Und sorry.Ich will niemanden hier verwirren. :) Ich bin kein Mathematiker und deswegen versuche ich es so gut wie möglich zu umschreiben.


Alles findet im R^3 statt.

Der Körper kann eine Kugel sein. Muss aber nicht!

Die Oberfäche setzt sich zusammen aus Dreiecken.

Jedes Dreieck hat einen Normalen Vektor.

Ich habe Nachbarschaftsbeziehungen zwischen den einzelnen Dreiecken.

Ich will durch x-y Translation einen Punkt in dieser Nachbarschaft bewegen (von Dreiecksschwerpunkt zu Dreiecksschwerpunkt, wie du schon richtig erkannt hast)

Das Rechteck das über der Oberfläche in einem eindeutig bestimmten Abstand "schweben" soll, soll auf das aktive Dreieck zeigen in dem ich mich positionell gerade befinde.

Der Mittelpunkt des "schwebenden" Rechtecks befindet sich auf der Normalen des aktiven Dreiecks.


Frage war: Wie kann ich anhand der Daten entweder die Rotationswinkel + Reihenfolge für mein Rechteck ermitteln damit es auf das aktive Dreieck zeigt. Oder wie kann ich das Rechteck errechnen (Punkt Koordinaten)?


Ich hoffe mit dieser Formulierung etwas besser zu liegen,
und wenn das immer noch nicht helfen sollte werde ich eine Grafik für das Problem zeichnen.


Bin immer noch auf eine Antwort gespannt!


Andre

doppelelch
07.07.2003, 16:43
Originalnachricht erstellt von bytetrasher
Hallo Doppelelch,

Danke für dein Hilfeangebot. Und sorry.Ich will niemanden hier verwirren. :)


Ich hatte auch nicht angenommen, dass Du das absichtlich machst :D



Der Körper kann eine Kugel sein. Muss aber nicht!


In diesem Fall wirds wohl doch komplizierter, weil das dann womöglich keine einfachen Rotationen sind.


Ich habe Nachbarschaftsbeziehungen zwischen den einzelnen Dreiecken.


Was meinst Du denn mit "Nachbarschaftsbeziehungen"?



Ich will durch x-y Translation einen Punkt in dieser Nachbarschaft bewegen (von Dreiecksschwerpunkt zu Dreiecksschwerpunkt, wie du schon richtig erkannt hast)


Dann ist das eine "einfache" Translation und keine Rotation. Wo soll da dann bitte eine Rotation sein?
Achso...in dem Sinne, dass der zu den Ebenen gehörige Normalenvektor vom Wechsel von einer Ebene auf die nächste Ebene eine Richtungsänderung erfährt. Meinst Du das?
D.h. - um es zusammenzufassen:
Es sind zwei Vektoren a und b gegeben (die Normalenvektoren) und Du suchst eine Möglichkeit, die Rotation, die von a zu b führt zu beschreiben?



Das Rechteck das über der Oberfläche in einem eindeutig bestimmten Abstand "schweben" soll, soll auf das aktive Dreieck zeigen in dem ich mich positionell gerade befinde.


Inwiefern soll nun dieses Rechteck eine Rolle spielen?


Frage war: Wie kann ich anhand der Daten entweder die Rotationswinkel + Reihenfolge für mein Rechteck ermitteln damit es auf das aktive Dreieck zeigt. Oder wie kann ich das Rechteck errechnen (Punkt Koordinaten)?


Naja, wenn das oben beschriebene Problem für die Normalenvektoren gelöst ist, Du den Abstand von Rechteck zu Dreiecksfläche kennst, sowie die Koordinaten eines Punktes auf der Dreiecksfläche bekannt sind, so sollte sich die Gleichung der Ebene, in dem die Rechteckfläche liegt leicht ermitteln lassen. Über zusätzliche Randbedingungen sollte sich daraus dann auch ein Rechteck beschreiben lassen.

Ich warte erstmal auf Bestätigungen meiner Interpretationen Deiner Ausführungen, bevor ich weitermache.

Gruß
de

nobody
08.07.2003, 10:56
Hallo Doppelelch,

Das ist alles korrekt was du sagt. Ich will die Rotationswinkel von
vektor a nach b berechnen. Nicht nur die relativen Winkel sondern auch die absoluten. Ich hoffe das ist korrekt ausgedrückt.

Bin auf mehr gespannt!

---

Ich will dir noch kurz beschreiben warum ich diese Fragen habe,warum es Nachbarschaftsbeziehungen gibt und ich dieses Rechteck brauche.

Ich schreibe gerade ein Plugin für 3D Studio MAX. Dieses Plugin soll Objekte verändern können. Die Veränderungen werden durch ein Multi-Sensitives Touchpad realisiert. Der Körper der verändert werden soll,besteht aus Vertex-Punkten und Faces (Dreiecke). Jedes Dreieck ist verbunden mit seinen Nachbarn, wodurch ich Nachbarschaftsbeziehungen aufbauen kann. Entweder Grob (N,S,O,W,..) oder feiner aufgelöst durch Winkel. Aber wie gesagt es gibt Nachbarschaftsbeziehungen und ich habe somit ein 2D Netz.Das funktioniert auch schon. Aber das ist ja nicht das eigentliche Problem.

Das Rechteck repräsentiert virtuell in der 3D-Szene das Touchpad.
Ich lasse dann alle Normalen des Körpers darauf prüfen ob sie dieses Rechteck schneiden (Strahl-Ebenen-Schnitt) Diese Dreiecke die mit Ihren Normalen das Rechteck schneiden können dann mit dem Touchpad verändert werden. Deshalb das Rechteck.

---

Andre

doppelelch
08.07.2003, 14:42
Originalnachricht erstellt von bytetrasher

Ich will dir noch kurz beschreiben warum ich diese Fragen habe,warum es Nachbarschaftsbeziehungen gibt und ich dieses Rechteck brauche.

Ich schreibe gerade ein Plugin für 3D Studio MAX. Dieses Plugin soll Objekte verändern können. Die Veränderungen werden durch ein Multi-Sensitives Touchpad realisiert. Der Körper der verändert werden soll,besteht aus Vertex-Punkten und Faces (Dreiecke). Jedes Dreieck ist verbunden mit seinen Nachbarn, wodurch ich Nachbarschaftsbeziehungen aufbauen kann. Entweder Grob (N,S,O,W,..) oder feiner aufgelöst durch Winkel. Aber wie gesagt es gibt Nachbarschaftsbeziehungen und ich habe somit ein 2D Netz.Das funktioniert auch schon. Aber das ist ja nicht das eigentliche Problem.

Das Rechteck repräsentiert virtuell in der 3D-Szene das Touchpad.
Ich lasse dann alle Normalen des Körpers darauf prüfen ob sie dieses Rechteck schneiden (Strahl-Ebenen-Schnitt) Diese Dreiecke die mit Ihren Normalen das Rechteck schneiden können dann mit dem Touchpad verändert werden. Deshalb das Rechteck.


Bahnhof?
Macht nix...kümmere ich mich lieber um die mathematische Seite des Problems :D



Das ist alles korrekt was du sagt. Ich will die Rotationswinkel von
vektor a nach b berechnen. Nicht nur die relativen Winkel sondern auch die absoluten. Ich hoffe das ist korrekt ausgedrückt.


Ok, jetzt allmählich wirds greifbar.

Kurz vielleicht eines Skizze, wie ich vorgehen würde.

Nochmal:
Es geht um eine sinnvolle mathematische Beschreibung einer Rotation, die einen Vektor a in einen Vektor b überführt (wobei beide Vektoren bekannt sind).

Ich will versuchen, Dir kurz zu skizzieren, wie ich vorgehen würde, auch um zunächst gegenzufragen, was Dir bekannt ist, und was nicht.

Muss mal eben unterbrechen. Später mehr.

Gruß
de

doppelelch
08.07.2003, 15:29
Mist...Unterbrechung war zu lang - konnte im letzten Beitrag nichts mehr ändern. :(


Deswegen zunächst einige kleine Ergänzungen zum letzten Beitrag:

Erstens:
Wenn es Dir nur um den Winkel zwischen den beiden Vektoren geht, dann wäre der mit Hilfe des Skalarproduktes schnell berechnet.

Zweitens:
Sollten sich die "Verlängerungen" der beiden Vektoren a und b nicht in einem Punkt schneiden, so würde es sich nicht um eine Rotation handeln. In diesem Fall hätte die Abbildung von a nach b noch einen translativen Anteil. Dann würde ich mich zunächst nur um die Rotation (also um die "Änderung des Winkels") kümmern und dann in einem zweiten Schritt um die Translation.


Nun zur Skizze des "Löungsweges" (zunächst nur für die Rotation):

Also a und b sind bekannt.
Dann lässt sich ein Vektor (nennen wir ihn n) ermitteln, der senkrecht auf der durch a und b aufgespannten Ebene steht.
Aus n gewinnt man wiederum zwei Vektoren (x und y), die senkrecht zueinander und jeweils senkrecht zu n stehen. D.h. a und b liegen in der durch x und y aufgespannten Ebene. Normiert man nun noch die Vektoren n, x und y, so bilden diese drei Vektoren eine Orthonormalbasis (ONB) des R^3.
Dann wird der Winkel (t) zwischen a und b berechnet (Skalarprodukt!).
Bezüglich der o.g. ONB lässt sich die Rotation bequem als eine 3*3-Matrix darstellen:




1 0 0

0 cos(t) -sin(t)

0 sin(t) cos(t)





Um diese Abbildung nun auf das übliche kartesische Koordinatensystem (die kanonischen Basisvektoren) zu Transformieren, ist eine sog. Basistransformation durchzuführen.
(Und genau dafür ist es dann praktisch, wenn die Basisvektoren n,x und y normiert sind).

Soweit die Grundidee.
Kommt Dir davon irgendetwas bekannt vor?

Warte zunächst mal auf Rückmeldung.

Sollte Dir das alles sonderbar vorkommen, können wir das Ganze auch nochmal mit Zahlenbeispielen für a und b durchrechnen.


Gruß
de

nobody
08.07.2003, 15:49
Ahoi doppelelch,


Mmmh Naja nur ein paar sachen sagen mir was. :confused: Kann mir vorstellen wie dieses Gebilde aussieht. Hab ja auch schon einiges gelesen. Aber ich würde mich natürlich freuen, wenn du ein Beispiel zeigen könntest. :)


Andre

doppelelch
08.07.2003, 19:25
Originalnachricht erstellt von bytetrasher
Aber ich würde mich natürlich freuen, wenn du ein Beispiel zeigen könntest. :)


Ich??
Da hast Du etwas falsch verstanden! :D

DU (!) sollst mir ein Beispiel geben.
Also gib mal zwei Vektoren a und b (also zwei Normalenvektoren) vor, mit denen das vonstatten gehen soll.

Damit wären dann allerdings nur die beiden (Aus-)Richtungen der ("Dreiecks-")Ebenen abgebildet. Bezüglich der genauen Lage von alter und neuer ("Dreiecks-")Ebene im Raum bräuchte man dann natürlich die ("Ziel-")Koordinaten eines (beliebigen) Stützvektors. Diese müsstest Du ja aber ohnehin kennen. Also so etwas wie eine Translation scheint mir jetzt gar nicht mehr unbedingt nötig. Und wenn es nun darum geht, eine (weitere) ("Rechteck-")Fläche in einem gewissen Abstand von dieser "neuen" ("Dreiecks-")Fläche beschreiben zu müssen, lässt sich das mit dem bereits bekannten Normalenvektor der ("Dreiecks-")Ebene doch hervorragend einrichten.

(noch eine kleine Bemerkung: Zwei Vektoren, die die gleiche Länge haben, lassen sich ohnehin stets durch eine Drehung ineinander überführen - also nix Translation, wenn man sich wirklich nur die zwei Normalenvektoren anschaut. Und wenn es um die Lage von (fiktiven) Fußpunkten von Vektoren im Raum geht, geht es eigentlich um die Lage von Punkten auf einer Ebene - also um die besagten Stützvektoren). Will sagen: Das in meinem letzten Beitrag zur Translation Geschriebene macht wohl nicht unbedingt Sinn. Aber jetzt ists (zumindest mir) wieder klar. War vorhin etwas hektisch.


Gruß
de

nobody
09.07.2003, 13:13
Ahoi Doppelelch,

Sorry, wollte mich eigentlich noch gestern melden.

Also gib mal zwei Vektoren a und b (also zwei Normalenvektoren) vor, mit denen das vonstatten gehen soll.

OK dann hier 2 ganz simple Normalvektoren

a = (0;1;2)
b = (1;0;2)

Bezüglich der genauen Lage von alter und neuer ("Dreiecks-")Ebene im Raum bräuchte man dann natürlich die ("Ziel-")Koordinaten eines (beliebigen) Stützvektors. Diese müsstest Du ja aber ohnehin kennen.

Wie meinst du das?

Bis dann

Andre

Tomboy
09.07.2003, 13:41
Originalnachricht erstellt von bytetrasher
Wie meinst du das?
Ich denke er meint, dass du zunächst die Normalenvektoren umwandelst, aber noch den genauen Punkt brauchst, wo der Vektor auf der Ebene steht, also den Schwerpunkt des Dreiecks, auf dem der neue Normalenvektor steht. Erst, wenn du diesen Punkt dazu angibst (den du ja, wie doppelelch schon sagte, ohnehin kennen müsstest), kannst du die Ebene genau bestimmen.

nobody
09.07.2003, 17:06
Ahoi TomBoy,

Danke für den Hinweis! Das mit den Stützvektoren ist mir nun ersichtlich. :light: Aber wie komme ich nun auf meine gesuchte Ebene? Ich hab zwar einiges gelesen über Ebenen in Parameter-, Koordinaten-, Normalform,... Aber Was ist nun sinnvoll? Wie erhalte ich Koordinaten des Rechtecks das in dieser Ebene liegen soll. Vielleicht kannst du mir das beantworten ::TomBoy::

Fragen über Fragen... UND...

...Ich hab echt noch ne Menge Nachhol Bedarf aus dem Bereich der
analytischen Geometrie. :eek: :cry:
Deswegen werd ich mir erstmal darüber wieder was anlesen!! Is schon ne Weile her :)

Desweiteren wenn möglich, sollten die Möglichkeiten die hier aufgezeigt werden irgendwie Programmiertechnisch umgesetzt werden können.
Ich weiss das kann ich nicht fordern. Aber ich bin doch auch nur einer dieser faulen Programmierer :rolleyes:


Bis dann und immer offen für weitere Anstöße...!


Andre

Tomboy
09.07.2003, 18:04
Jetzt bin ich doch erstmal wieder ein wenig verwirrt. Du hast dein ursprüngliches Dreieck mit dem zugehörigen Normalenvektor. Jetzt willst du den Vektor zu einem neuen Vektor umwandeln und ein neues Dreieck an anderer Stelle bestimmen. Was hast du von deinem Zieldreieck bzw. deinem Zielvektor denn nun gegeben und was muss dazu noch berechnet werden??

doppelelch
09.07.2003, 21:35
Originalnachricht erstellt von bytetrasher

...Ich hab echt noch ne Menge Nachhol Bedarf aus dem Bereich der
analytischen Geometrie. :eek: :cry:
Deswegen werd ich mir erstmal darüber wieder was anlesen!! Is schon ne Weile her :)


Das ist übrigens mit Schulwissen nicht mehr zu erschlagen. Nur so nebenbei (jetzt kommt gleich wieder uppi angehüpft und erzählt, er habe das schon in der dritten Klasse gemacht! :D )


Desweiteren wenn möglich, sollten die Möglichkeiten die hier aufgezeigt werden irgendwie Programmiertechnisch umgesetzt werden können.


Sind sie! Denn letztlich sinds nur Gleichungen.
Ob das allerdings die vorhandenen Speicherkapazitäten leisten können, kann ich Dir nicht sagen.



@tomboy:
DAS würde mich auch interessieren!


Ich konzentriere mich jetzt erstmal auf die Überführung der beiden beispielhaft vorgegebenen Normalenvektoren (gleicher Länge!):

n(1)=(0;1;2)
n(2)=(1;0;2)





1. Schritt:

Ermittlung eines Normalenvektors v=(v(x);v(y);v(z)) auf der durch n(1) und n(2) aufgespannten Ebene. Dazu ist das folgende Gleichungssystem zu lösen:

n(1)°v=0
n(2)°v=0

("°" steht hier, wie im Folgenden, für das Skalarprodukt)

also

v(y) + 2 v(z) = 0
v(x) + 2 v(z) = 0

=> v(x) = - 2v(z)
v(y) = - 2v(z)

also v = v(z)*(-2;-2;1)

eine möglicher Normalenvektor v wäre also (-2;-2;1)


2. Schritt:

Bestimmung einer ONB mit v / ||v|| als einen Basisvektor.

Es fehlen also noch zwei Basisvektoren u und w, wobei zunächst nur mal gelten soll (normiert wird später)


u°v=0
w°v=0
w°u=0

mit u=(u(x);u(y);u(z)) und w=(w(x);w(y);w(z))

ein Vektor u, der zu v senkrecht steht ist schnell gefunden, nämlich Vektor a:

u=(0;1;2)(=a)

Für den dritten Vektor w müssen nun die beiden Gleichungen

w°v=0 und w°u=0 gelten, also



-2w(x)-2w(y)+w(z)=0

und

w(y)+2w(z)=0


=>(z.B.) w = w(z)*((5/2);-2;1) = (w(z)/2)*(5;-4;2)

d.h. ein möglicher Vektor w wäre (5;-4;2)


Die enstprechende ONB ergibt sich damit zu

(1/3)*v ; (1/5)*u ; (1/(3*5))*w

Nennen wir die der Einfachheit halber künftig v´, u´ und w´



Schritt 3:

Die Ermittlung des Winkels t zwischen a und b:

cos(t) = a°b/(||a||*||b||)

=> cos(t)=4/5

t = arccos(4/5)




Schritt 4:

Darstellung der Drehung von a nach b mittels Drehmatrix bezüglich der Basisvektoren v,a,w:

1 0 0

0 cos(arccos(4/5)) -sin(arccos(4/5))

0 sin(arccos(4/5)) cos(arccos(4/5))



Für unsere Zwecke ein wenig handlicher:


1 0 0

0 4/5 -3/5

0 3/5 4/5


Nennen wir die Matrix im Folgenden A.



D.h.: Würde man a bezüglich der ONB (v´, u´, w´) darstellen, auf diese Darstellung die o.g. Matrix anwenden, so würde man b bezüglich der o.g. ONB erhalten.

Spielen wir das doch nochmal eben durch:

a=0*v´+5*u´+0*w´. D.h. bezogen auf die Basisvektoren v,a,w hat a die Koordinaten (0;5;0).

darauf die Matrix angewandt ergibt:

(0; 4/5*5 ; 3/5*5)

0*v´+(4/5)*5*u´+(3/5)*5*w´ ergibt

(1;0;2)=b und damit alles, wie es sein sollte!

(Froi!)



Schritt 5:

Aufstellen der (Basis-)Transformationsmatrix

Nun muss also die Matrix A transformiert werden, so dass die entstehende Bildmatrix (nennen wir sie B) die durch A im ONB-Koordinatensystem beschrieben Drehung nun also in den kartesischen Koordinaten beschreibt.

Die dafür nötige Transformationsmatrix Z ergibt sich direkt aus der ONB (diese bilden nämlich die Spalten von Z):



-2/3 0 5/(3*5)

-2/3 1/5 -4/(3*5)

1/3 2/5 2/(3*5)



Da es sich um eine orthogonale Matrix Z handelt (die Spalten von Z sind ja eine ONB), lässt sich diese leicht invertieren. (Die transponierte Matrix ist die Inverse. Heißt: einfach Zeilen und Spalten vertauschen und man erhält die inverse Matrix Z-1)

Die gesuchte Matrix B ergibts sich jetzt einfach wie folgt:

B=Z*A*Z-1


Auf gehts:


Oje, wenn ich mich da mal nicht verrechne!
(Also wenn Du Dich mit Matriznmultiplikation auskennst, würde ich das gerne DIR überlassen :D )




Werde mal einen Versuch starten und den gleich hier reinsetzen

Gruß
de

doppelelch
09.07.2003, 22:11
So, habe mich nun also im ersten Versuch kläglich verrechnet :D

Kannst ja selber nochmal rechnen. Das Ergebnis kannst Du ja leicht überprüfen, denn es muss dann am Ende ja Folgendes stimmen:

B*a=b


Werde mir jetzt erstmal ne Pause gönnen.

Gruß
de

doppelelch
10.07.2003, 08:27
So...(halbwegs ausgeschlafen lässt sich so etwas wieder besser machen):

Mein Ergebnis für B lautet:




40 13 16

(1/45)* -5 40 -20

-20 16 37





Die Probe ergibt dann tatsächlich





0 45 1
B * a = B * 1 = (1/45) * 0 = 0 = b
2 90 2





So, durch den Wust kannst Du Dich ja jetzt erstmal durcharbeiten und überlegen, ob Du

a) noch Fragen hast und

Du b) in der Lage bist, dass zu programmieren. Grundsätzlich sollte das eigentlich kein Problem darstellen. Die Gleichungen, die zu lösen sind, sind sämtlich linear (bis auf die Winkelberechnung, aber einen arccos sollte man mit dem PC ja noch ziehen können :D )

Wie gesagt: Das war jetzt nur die Ermittlung der Drehmatrix, welche die Überführung von a nach b in kartesischen Koordinaten beschreibt.
Die zu diesen Normalenvektoren (a, b) gehörigen Ebenen könnten nun aus a und b und jeweils einem beliebigen Stützvektor rekonstruiert werden.
Suchst Du nun noch jeweils eine ("Rechteck-")Ebene, die in einem gewissen Abstand parallel jeweils über diesen ("Dreiecks-")Ebenen liegt, so ließe sich dies auch schnell ermitteln. Du kennst ja die Normalenvektoren zu den Ebenen (nämlich a und b). Durch einfache Vektoraddition erhältst Du aus dem bekannten Stützvektor der ("Dreiecks-")Ebene, dem Normalenvektor und dem bekannten Abstand zwischen ("Dreiecks-")- und ("Rechtecks-")Ebene einen Stützvektor für die ("Rechteck-")Ebene. Da die Orientierungen dieser beiden Ebenen identsich ist (sie liegen ja parallel) hast Du also damit eine Darstellung für die ("Rechteck-")Ebene.


Gruß
de

nobody
11.07.2003, 11:43
Ahoi de und tomboy


Na das muss ich mir erstmal ausdrucken. Aber echt klasse.
Mir war es gerstern leider nicht möglich online zu gehen
deswegen werd ich mich mal übers Wochenende hinsetzten
und mein Kopf rauchen lassen :)

Erstmal soweit danke und ich meld mich wenn ich bezüglich
deiner Rechnung fragen habe bzw ein Ergebnis habe. Und Tomboy, Leider Gottes muss mir selber erstmal klar werden was ich eigentlich alles habe und
noch brauche. Aber das kommt mit der Zeit. Hoffentlich!

Na jut werd dann mal loslegen und rechnen


Bis dann

Andre

doppelelch
11.07.2003, 17:30
Originalnachricht erstellt von bytetrasher

Na jut werd dann mal loslegen und rechnen


Frohes Schaffen :D