Ik heb 4 punten in een 3D assenstelsel die samen een vierhoekkig vlak zijn. Elk punt heeft een X, een Y en een Z coordinaat. De Z is altijd 1 omdat de figuur niet in de verte komt te liggen. De 4 punten moeten naar andere coordinaten worden getransponeerd door middel van een matrix. Die matrix bestaat uit 3 kolommen en 3 rijen. De 4 punten moeten naar 4 andere punten worden verplaatst om zo een andere vierhoek te vormen. Zo ziet mijn matrix er uit:
[ h11 h12 h13 ] [ h21 h22 h23 ] [ h31 h32 h33 ]
Nu is de theorie dat elke punt binnen die vierhoek via één enkele matrix kan worden getransponeerd dus met diezelfde matrix elke pixel of punt in dat vlak.
Als je Bv. het punt (4.5) 1 punt naar rechts wil doen gaat dat zo:
Als je dit voor 4 punten doet heb je 8 vergelijkingen. Bij de punten A(0,0) naar A'(0,0), B(7,0) naar B'(7,0), C(6,1) naar C'(7,1) en D(1,1) naar D'(0,1) dan krijg ik 4 matrixen, 1 voor elk punt. Hiermee kan ik elk punt naar zijn nieuwe punt transponeren. Dit is geen probleem.
Waar ik nu mee zit is dat ik één matrix moet hebben die voor elk punt geldt, zowel de vier hoekpunten als elk punt binnen dat vlak, waardoor de ene vierhoek op de nieuwe coordinaten terecht komt. Dit heet Projective of Perspective Transformatie. Mijn vraag is: Hoe kan ik achter die matrix komen die voor elk punt geldt?
(Ik hoop dat ik het niet moeilijker heb gemaakt.)
Bij voorbaat dank,
Erik
Student universiteit - donderdag 5 juni 2003
Antwoord
Dag Erik,
je vraag is niet helemaal duidelijk omdat je (voor mij) onduidelijke woorden gebruikt. "transponeren", dat doe je met een matrix en het betekent dat je alle elementen van de matrix spiegelt in zijn eigen diagonaal.
Verder: uit je voorbeeld ("stel je wilt het punt 4.5 1 naar rechts doen") maak ik op dat je de punten wilt transleren ofwel verplaatsen. Dat doe je niet met een matrixvermenigvuldiging.
Een transformatiematrix A (zodat y=Ax) is alleen goed voor * rotaties * spiegelingen * schalingen
Maar is niet bruikbaar voor translaties. Wanneer je alle punten x uit een zekere verzameling (jouw vierhoek) wilt transleren over vector q, dan pas je voor elk punt de formule toe x'=x+q