Transformationsmatrix gesucht
-
der 4te punkt muss eine lineare kombination aus den anderen 3 punkten sein, dann kannst du sowas errechnen.
alternativ kannst du vielleicht 2 matrizen erstellen aus je 3 punkten (je nachdem wofuer du das brauchst).
-
Ich wollte folgendes damit machen:
Wenn ich einen Punkt P im Viereck A' B' C' D' habe, möchte wissen, welche Lage dieser Punkt im Viereck A B C D hätte. Ich dachte also, ich erstelle eine Matrix, die das Viereck A B C D zu dem Viereck A' B' C' D' transformiert, invertiere diese und transformiere den Punkt P mit dieser Invertierten Matrix. Das dient zur Texturkoordinatenberechnung des Punktes P. Über das Viereck A' B' C' D' ist eine Textur gleichmäßig gestreckt. Oder gibt es dafür ein geeigneteres Verfahren?
MfG, Jochen
edit:
rapso schrieb:
der 4te punkt muss eine lineare kombination aus den anderen 3 punkten sein, dann kannst du sowas errechnen.
Das müsste bei einem Viereck doch immer der Fall sein, wenn alle Punkte (wie bei mir) auf einer Ebene liegen und niemals zwei Punkte identisch sind, oder täusche ich mich da?
-
Bashar schrieb:
Mit so einer Transformationsmatrix kannst du nur affine Abbildungen darstellen, also Kombinationen aus: Verschiebung, Drehung, Stauchung/Streckung/Spiegelung.
Also bleibt ein Parallelogramm immer ein Parallelogramm. Ja, dann klappt das Vorhaben nicht.
-
Hm, ich weiss jetzt aber immer noch nicht, wie ich eine solche Matrix berechnen kann. Hier ist mal mein Ansatz:
Ich habe folgende bekannte Punkte:
Punkt A (a1,a2,0,0)
Punkt B (b1,b2,0,0)
Punkt C (c1,c2,0,0)
Punkt D (d1,d2,0,0)Punkt A' (a1',a2',0,0)
Punkt B' (b1',b2',0,0)
Punkt C' (c1',c2',0,0)
Punkt D' (d1',d2',0,0)Und die Matrix M:
m11,m12,m13,m14
m21,m22,m23,m24
m31,m32,m33,m34
m41,m42,m43,m44Damit die Matrix die Anforderunen erfüllt, muss ja folgendes gelten:
a1*m11 + a2*m21 = a1'
a1*m12 + a2*m22 = a2'b1*m11 + b2*m21 = b1'
b1*m12 + b2*m22 = b2'c1*m11 + c2*m21 = c1'
c1*m12 + c2*m22 = c2'd1*m11 + d2*m21 = d1'
d1*m12 + d2*m22 = d2'Aber jetzt hätte ich ja ein Gleichungssystem mit 8 Gleichungen und 4 Unbekannten. Ich nehme an, dass der Ansatz so irgendwie falsch ist.
MfG, Jochen
-
Wie schon gesagt wurde: Was du vorhast geht mit einer Matrix einfach nicht. Ich vermute mal dass es dir immer noch um das Problem von hier geht!?
Eine Lösung wären vielleicht Baryzentrische Koordinaten, allerdings ist das mit allgemeineren Polygonen als Dreiecken auch wenn man sich nur auf konvexe beschränkt schon nicht gerade trivial. Vielleicht kannst du dein Ziel auch erreichen indem du dein Viereck in zwei Dreiecke teilst und dann einfach die Baryzentrischen Koordinaten deines Punktes ausrechnest!?
-
Ja genau, es geht mir immer noch um das Problem aus diesem Thread. Allerdings hatte ich dort leider keine Antworten bekommen.
Das Problem mit den zwei Dreiecken ist ja, dass die Textur dann nicht mehr gleichmäßig über das Viereck gestreckt wird.
Bei der Grafik http://b.imagehost.org/download/0235/Grafik habe ich etwa 200 Dreiecke verwendet.
Gibt es denn keine einfachere Möglichkeit zur Berechnung der Texturkoordinaten des Punktes P (siehe Grafik) als Baryzentrische Koordinaten?
-
Jochen S. schrieb:
..
Das Problem mit den zwei Dreiecken ist ja, dass die Textur dann nicht mehr gleichmäßig über das Viereck gestreckt wird.
..Wieso das denn nicht? Ob ich ein Viereck wähle oder zwei Dreiecke macht doch keinen Unterschied. Du bauchst nichtmal neue Texturkoordinaten berechnen.
-
inter2k3 schrieb:
Wieso das denn nicht? Ob ich ein Viereck wähle oder zwei Dreiecke macht doch keinen Unterschied. Du bauchst nichtmal neue Texturkoordinaten berechnen.
Mit nur 2 Dreiecken würde die Textur nicht gleichmäßig gestreckt. Stell dir dazu mal ein Quadrat aus zwei Dreiecken vor, über das gleichmäßig eine quadratische Textur gelegt wird. Wenn du jetzt einen der Punkte verschiebst, diese Verschiebung allerdings nur ein Dreieck betrifft, wird die Textur auf dem einen Dreieck nach wie vor verzerrungsfrei abgebildet und auf dem anderem Dreieck gestreckt. Es entsteht also ein "Bruch" in der Textur.
-
Jochen S. schrieb:
Gibt es denn keine einfachere Möglichkeit zur Berechnung der Texturkoordinaten des Punktes P (siehe Grafik) als Baryzentrische Koordinaten?
Nein, wie gesagt ist das für Dreiecke zwar einfach aber für alles andere eben leider nichtmehr. Mehr dazu hier und hier...
-
Hm, dann bleibt mir ja gar nichts anderes übrig, es auf diesen Weg zu versuchen.
Danke auf jeden Fall für eure Antworten
-
spontaner Ansatz: wenn du die Geraden deines neuen Rechtecks verlängerst, muss es Schnitpunkte der ehemaligen Paralellen Geraden geben. Dann bilden die Schnittpunkte mit den Geraden jeweils ein Dreieck und die Schnittfläche der Dreiecke dein transformiertes Quadrat.
Damit, und mit baryzentrischen Koordinaten, lässt sich sicher so eine Transformation berechnen.
-
Irgendwie bin ich gerade versucht, deine Signatur zu zitieren...
Wäre nett, wenn du das ein bisschen genauer beschreiben könntest, ich verstehe gerade nicht so genau, was du meinst. Wenn ich die Vierecksseiten verlängere, muss es nicht unbedingt Schnittpunkte geben, das Viereck könnte theoretisch auch ein Parallelogramm sein.MfG, Jochen
-
Hmm im Raum der Projektiven Transformationen hat man immer einen Schnittpunkt...ich müsste mal Aus-X-en ob der bereits ausreicht...morgen ;).
Und wenns keinen Schnittpunkt gibt, dann ist dein Problem eh wunderbar einfach, dann ist dein Objekt nämlich ein beliebig rotiertes Rechteck, und da weißt du ja, wie das geht.
-
So, heute ist ein neuer Tag :).
Ich kam zu folgendem Schluss: im Projektionsraum geht das sogar als Matrixmultiplikation, meine Fachliteratur hat mich darin bestätigt.
Befinden wir uns in 2D und sind 2 Schnittpunkte verfügbar (wobei als Schnittpunkt auch ein unendlicher Punkt funktioniert) so kann man zwischen ihnen eine Linie im Projektionsraum berechnen. ich nenne sie mal L=(L1,L2,L3)dann sieht die Rektifizierungsmatrix so aus:
Also ist A=H*A'. inverse bilden: H^-1*A=A'. Fertig.
Da kein 3D gefordert war, überlasse ich die Verallgemeinerung dem geneigten Leser
Quelle:
Hartley& Zisserman: Multiple View Geometry
-
Hm, das Problem beschränkt sich ja auf 2D. Vielen Dank nochmal für die Antworten,
wenn es noch Probleme geben sollte, kann ich das ja hier reinschreiben. Ich werde mich jetzt wohl erst mal näher mit den Themen beschäftigen.MfG, Jochen