Ich möchte Koordinaten eines Vielecks auf die eines anderen Vielecks umrechnen. (im R2)
Gesucht ist die Matrix M, die einen Punkt P auf den Punkt P' abbildet.
Gegeben sind 4 Punkte A,B,C,D des alten und 4 Punkte A',B',C',D' des neuen Systems.
P' = P * M
Wenn ich nun ein Gleichungssystem aufstelle, erhalte ich 8 Gleichungen mit 4 Unbekannten. (Die 4 Matrixkoeffizienten)
Nur ist es mir bisher nicht gelungen dieses LGS zu lösen (auch nicht mit Hilfe von Maxima)
Zu beachten ist, dass die Punkte zwar gegeben sind, aber als Konstanten vorliegen, ich also nicht mit Zahlen rechnen kann.
(Da mein Programm diese 8 Punkte vorgibt)
Jemand hat mir ein paar Tipps gegeben, darunter auch, erst einmal in ein System der Art:
A' = (0; 0) B' =(1; 0) C' = (1; 1) D'=(0, 1) umzurechnen.
Dies halte ich auch für sinnvoll, da ich dann von dort leicht ins neue System transformieren kann.
(Zweite Matrix berechnen und beide Matrizen multiplizieren)
Allerdings habe ich Probleme beim Lösen des LGS,
Wie stelle ich das nun an ?
Du hast da ein kleines Problem...Du redest von seltsamen Koordinaten: Eine affine Basis im 2D ist lässt sich vollständig durch 3 verschiedene Punkte spezifizieren. Du hast jedoch 4 und dein linkes Bild ist vieles, aber sicher kein Parallelogramm. Es muss aber affin sein, wenn Du erwartest, daß sich ein lineares Gleichung ergibt. Wenn Du die Koordinaten nicht affin spezifizierst, musst Du ne Definition von Deinen Korrdinatensystem geben (Baryzentrisch?). Ansonsten, wenn du affin bist, musst Du halt beschliessen, was Deine 0 ist, deine Koordinaten entsprechend ausdrücken und dann... Schwups http://de.wikipedia.org/wiki/Basiswechs ... torraum%29
Verstehe ich nicht so ganz. Ich möchte die Koordinaten des einen Rechtecks in die des anderen umrechnen. Gegeben habe ich alle Punkte beider Rechtecke wobei A A' B B' C C' und D D' entspricht. Wie gehe ich nun an das ganze heran ?
Mal davon abgesehen, dass dein Rechteck in mathematisch falscher Richtung beschriftet ist, lässt sich dein Viereck in eine Ebene legen, die durch drei seiner Eckpunkte definiert werden kann.
Die Punktgleichungen wären demnach:
OP = OA + r*AB + s*AC
OP' = OA' + r*A'B' + s*A'C'
Dein Ziel ist jetzt aus der ersten Gleichung die Parameter r und s zu bestimmen und in die zweite Gleichung einzusetzten um damit die Koordinaten des Punktes P' zu erhalten.
du hast also resultierend die drei Gleichungen
Um Schreibarbeit zu ersparen habe ich jetzt einmal b1-a1 = x1, c1-a1 = y1 usw. gesetzt.
Diese stellst du nun nach r und s um:
I: r = -(a1+s*y1)/x1 für x<>0, sonst s = a1/y1 für y1=0 etc. (viele Fallunterscheidungen, am konkreten Beispiel wäre es leichter ^^)
II: s = -(a2+r*x2)/y2 für y<>0
= (-a2+(a1+s*y1)/x1)*x2/y2
= (a1*x2+s*y1*x2-a2*x1)/(x1*y2)
= s*y1*x2/(x1*y2)+(a1*x2-a2*x1)/(x1*y2)
s*(1-y1*x2/(x1*y2)) = (a1*x2-a2*x1)/(x1*y2)
s = ((a1*x2-a2*x1)/(x1*y2))/(1-y1*x2/(x1*y2))
den ganzen Kram zu vereinfachen erspar ich mir jetzt - den Wert für s musst du jetzt noch in die Gleichung für r einsetzen und dann die beiden Variablen verwenden um in der zweiten Ebenengleichung den projezierten Punkt zu erhalten. (Achtung: Fallunterscheidungen berücksichtigen!)
Ich würde empfehlen dir das alles nochmal auf ein Blatt Papier zu schreiben, da es auf dem Rechner immer ein wenig unübersichtlich aussieht. Für Nachholbedarf in Sachen Vektorrechnung würde ich folgende Seite empfehlen: www.rither.de
Ob es mit OpenGL jetzt auf irgendeinem Weg einfacher geht, kann ich dir leider nicht beantworten, da ich noch ein totaler Newbie auf dem Gebiet bin. Das wäre auf jeden Fall ein Weg, den du einschlagen könntest.
Verstehe ich nicht so ganz. Ich möchte die Koordinaten des einen Rechtecks in die des anderen umrechnen.
cerotidinon hat geschrieben:
OP = OA + r*AB + s*AC OP' = OA' + r*A'B' + s*A'C'
Da steht die Antwort.... In der linearen Algebra tauchen nur 3 der Punkte auf - A;B;C in diesem Fall. Dein D wird dadurch automatisch so gelgegt, daß sich ein Parallelogramm ergibt und ist an sich völlig nutzlos. In deinem Bild auf der linken Seite ist jedoch kein Parallelogramm zu sehen - deshalb die frage, worin du eigentlich rechnest.
Es muss nicht zwangsweise ein Parallelogramm sein, allerdings könnte ich es, wenn es wirklich deutlich einfacher ist, vielleicht so einrichten. (allerdings gibt es eine gewisse Abweichung/Ungenauigkeit wodurch die Parallelität dann nicht ganz gewährleistet werden kann)
Und wenn ich kein Parallelogramm habe, brauche ich soweit ich weiß 4 Punkte. (R2 ist richtig)
Ich bin nicht allzu bewandert auf dem Gebiet.
Könntest du evtl. nochmal genau erläutern, was du nun eigentlich machen willst? Willst du das Vieleck verzerren?!
Wenn ja, was soll der Punkt dann für Voraussetzungen haben? Gleiches Verhältnis der Abstände zu den anderen Punkten? Gleicher Seitenabstand?
Ich versteh einfach nicht, was du vor hsat.
Also ich habe dieses Viereck und einen Punkt, der sich in diesem Viereck befindet. Und ein zweites Viereck. Jetzt möchte ich den Punkt im 2. Viereck berechnen, der dem Punkt im ersten Viereck entspricht.
Die Frage ist jetzt: Worauf beziehst du dich mit "entsprechen"? Was soll der Punkt für Eigenschaften haben? Wann "entspricht" bei dir ein Punkt dem anderen?
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Das Problem erinnert mich ein wenig an KeyStone, also das verzerren eines Bildes für einen Beamer, sodass es auf einer nicht exakt senkrecht zum Beamer stehenden Leinwand trotzdem gerade erscheint.
Wenn man hier zu keiner Lösung kommt, könne man vielleicht in OpenSource-Projekten zu dem Thema nachschauen.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Mit entsprechen meine ich, dass wenn der Punkt zB. ein Eckpunkt ist, soll dieser auf den entsprechenden Eckpunkt des anderen Vierecks abgebildet werden. Das Gleiche soll für alle dazwischenliegenden Punkte derart passieren, dass für jeden Punkt des ersten Vierecks ein entsprechender Punkt auf dem zweiten Viereck gefunden wird.
hm, dir ist soweit klar, dass es in jedem Viereck unendlich viele Punkte gibt?!
Tut mir Leid, ich versteh immernoch nicht das Problem - vielleicht kann mir ja jemand anderes auf die Sprünge helfen.
Falls du doch das Verhältnis der Eckpunkte meinen solltest, musst du es auch genau darüber ausrechnen. Du berechnest den Betrag des jeweiligen Vektors (AP,BP,CP,DP) über die Betragsformel |AP| = sqrt((p1-a1)²+(p2-a2)²)
Danach setzt du die jeweiligen Beträge ins Verhältnis und setzt das selbe Verhältnis auch in deinem neuen, verzerrten Viereck an. (Bsp: |AP|/|BP| = |A'P'|/|B'P'| )
Ich bin mir jetzt noch nicht ganz sicher, wie viele Eckpunkte du dafür wirklich brauchst - ich glaube drei. Das müsste man mal durchrechnen (ist mir aber gerade ein bißchen zu viel Rechenaufwand )
Der Trick bei dem Problem ist die Verwendung von Verhältnisgleichungen. Das Problem dabei ist die Abhängigkeit dieser voneinander.
Läge der Punkt auf [AB], dann wäre P'=[A'B']*[AP]/[AB], weil die anderen Verhältnisse rausfliegen. Das Gleiche gilt für die anderen vier Seiten. Wenn er nun nicht auf einer Seite liegt, muss diese Gleichung mit den Verhältnissen zu [AD] und [BC] gewichtet werden.
Die Schwierigkeit besteht nun darin, die Wichtungen rauszukriegen, denn die sind leider nicht so trivial, da diese wiederum gewichtet werden müssen, da [AB] und [BD] auch unterschiedlich lang sind.
Das Koordinatensystem ist also nicht nur nichtkarthesisch, sondern der Achsenwinkel ist zudem vom Abstand zum Ursprung abhängig (nicht nur vom Abstand sondern zudem noch vom Winkel zwischen P^ und einer der Achsen in (0,0)).
Hier setzt dann allerdings meine Mathematik aus, aber vielleicht konnte ich eine Anregung liefern.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Mir ist grad eingfallen, dass sich das Problem iterativ lösen lässt:
Berechne P' aus P nach Verhältnis zu [AB] und [AD].
Berechne P'' aus P' nach Verhältnis zu [BC] und [BD].
Ermittle Abstand P' P''
Neues P wird P''
Wiederhole solange bis Abstand < epsilon.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.