Transformationsmatrix Berechnen



  • Ich habe 4 eckpunkte eines Vierecks (kann Quadratisch, Rechteckig, Trapezförmig, Rautenförmig sein),
    nennen wir sie P1, P2, P3, P4

    P1 ist Oben Links

    P2 ist Oben Rechts

    P3 ist Unten Rechts

    P4 ist Unten Links

    Nun möchte ich das ganze mittels einer Transformationsmatrix da draus ein Rechteck machen (ist egal ob einer bestimmten größe oder größe bleibt beim Orginal, soll hinterher eh herunterscalliert werden), kennt jemand dafür Seiten die das Berechnen der Tranformationsmatrix erklären.

    Das Berechnen der Winkel zwischen den Ecken ist kein Problem, jedoch stocher ich momentan nur im Sand herum und habe keine Idee wie ich das Problem angehen soll.

    Danke im Vorraus



  • mynonA schrieb:

    Ich habe 4 eckpunkte eines Vierecks (kann Quadratisch, Rechteckig, Trapezförmig, Rautenförmig sein),
    nennen wir sie P1, P2, P3, P4

    P1 ist Oben Links

    P2 ist Oben Rechts

    P3 ist Unten Rechts

    P4 ist Unten Links

    Nun möchte ich das ganze mittels einer Transformationsmatrix da draus ein Rechteck machen (ist egal ob einer bestimmten größe oder größe bleibt beim Orginal, soll hinterher eh herunterscalliert werden), kennt jemand dafür Seiten die das Berechnen der Tranformationsmatrix erklären.

    Das Berechnen der Winkel zwischen den Ecken ist kein Problem, jedoch stocher ich momentan nur im Sand herum und habe keine Idee wie ich das Problem angehen soll.

    Danke im v******

    Trapezförmig wird mit einer Matrix nicht funktionieren, nur Parallelogramme mit spezialfällen davon.



  • und wie würde das bei bei Parallelogrammen ausschauen?



  • mynonA schrieb:

    und wie würde das bei bei Parallelogrammen ausschauen?

    die vektoren der zwei seiten des parallelogramms (z.B. P3-P4, P1-P4) als spaltenvektoren nebeneinander schreiben. dann fehlt noch die translation, die bekommst du mit zweidimensionalen vektoren auch nicht hin



  • Natürlich geht das, das Viereck muss aber Konvex sein!

    Kann mathematisch nicht sagen wie, aber habe einen C++ Code.

    Frank


  • Mod

    DerAltenburger schrieb:

    Natürlich geht das, das Viereck muss aber Konvex sein!

    Kann mathematisch nicht sagen wie, aber habe einen C++ Code.

    Frank

    Sicher, dass dies durch eine lineare Abbildung (=Transformationsmatrix) geschieht? Das kann nämlich nicht sein, weil die abbildung z.B. bei einem Trapez mit zwei unterschiedlich langen parallelen Seiten die Linearität verletzen würde.

    Die nötige Transformation ist für den allgemeinen Fall (meinetwegen auch eingeschränkt auf konvexe Vierecke) auf jeden Fall nichtlinear.



  • SeppJ schrieb:

    Die nötige Transformation ist für den allgemeinen Fall (meinetwegen auch eingeschränkt auf konvexe Vierecke) auf jeden Fall nichtlinear.

    Und wie kann man dann an dieses Problem herangehen?



  • SeppJ schrieb:

    DerAltenburger schrieb:

    Natürlich geht das, das Viereck muss aber Konvex sein!

    Kann mathematisch nicht sagen wie, aber habe einen C++ Code.

    Frank

    Sicher, dass dies durch eine lineare Abbildung (=Transformationsmatrix) geschieht? Das kann nämlich nicht sein, weil die abbildung z.B. bei einem Trapez mit zwei unterschiedlich langen parallelen Seiten die Linearität verletzen würde.

    Die nötige Transformation ist für den allgemeinen Fall (meinetwegen auch eingeschränkt auf konvexe Vierecke) auf jeden Fall nichtlinear.

    Nun ja, richtig linear sicher nicht, soll ja auch nicht.

    Das macht eine "Perspektiv- Transformation" eines konvexen Viereckkes in ein (achsparalleles) Rechteck.
    - für Perpektiv- Korrektur
    - für Textur- Übertragung in ein Viereck

    Bei mir klappt der Algo.

    Gruss
    frank



  • mynonA schrieb:

    Und wie kann man dann an dieses Problem herangehen?

    In Homogene Koordinaten transformieren. Im Projektionsraum gehen auch Trapeze. Sei allerdings gewarnt, dass die Zuordnung rechteck->Trapez nicht eindeutig ist. Da musst du dir dann was einfallen lassen.




Log in to reply