Tutorial 4: Transformationsmatricer¶
Transformationsmatricer: Rotationer¶
2D Rotation om Origo¶
Formlen for en 2D rotationsmatrix \(R(\theta)\) om origo er givet ved:
- \(\theta\) er rotationsvinklen.
- Positiv rotation er mod uret.
3D Rotation om Kardinalakser¶
Rotationsretningen følger venstrehåndsreglen.
Rotation om x-aksen¶
Rotationsmatrixen \(R_x(\theta)\) for rotation om x-aksen er:
Rotation om y-aksen¶
Rotationsmatrixen \(R_y(\theta)\) for rotation om y-aksen er:
Rotation om z-aksen¶
Rotationsmatrixen \(R_z(\theta)\) for rotation om z-aksen er:
3D Rotation om en vilkårlig akse¶
Rotationsmatrixen \(R(\hat{n}, \theta)\) for rotation om en vilkårlig akse \(\hat{n}\) er:
- \(\hat{n}\) er enhedsvektoren der definerer rotationsaksen.
- \(\theta\) er rotationsvinklen om aksen \(\hat{n}\).
Kombination af Rotationer om Kardinalakser¶
En vilkårlig 3D rotation kan opnås ved at kombinere rotationer om de tre kardinalakser: x, y og z.
- Lad \(\alpha\) (alpha) være rotationsvinklen om z-aksen.
- Lad \(\beta\) (beta) være rotationsvinklen om y-aksen.
- Lad \(\gamma\) (gamma) være rotationsvinklen om x-aksen.
De tilsvarende rotationsmatricer er \(R_z(\alpha)\), \(R_y(\beta)\) og \(R_x(\gamma)\).
Den samlede rotationsmatrix \(R_{total}\) opnås ved at multiplicere disse matricer i en bestemt rækkefølge:
Bemærk: Rækkefølgen af multiplikationen er afgørende, da matrixmultiplikation ikke er kommutativ. Forskellige rækkefølger vil resultere i forskellige samlede rotationer. Rækkefølgen ovenfor betyder, at rotationen om x-aksen udføres først, derefter rotationen om y-aksen, og til sidst rotationen om z-aksen.
Ved at multiplicere disse matricer kan man opnå en matrix, der repræsenterer en vilkårlig rotation i 3D rum. Denne metode er nyttig, når man ønsker at dekomponere en kompleks rotation i simple rotationer om de enkelte akser.
Skalering¶
Skalering langs Kardinalakser¶
2D Skalering¶
Skaleringsmatrixen \(S(k_x, k_y)\) for skalering langs de kardinale akser i 2D er givet ved:
- \(k_x\) er skaleringsfaktoren langs x-aksen.
- \(k_y\) er skaleringsfaktoren langs y-aksen.
3D Skalering¶
Skaleringsmatrixen \(S(k_x, k_y, k_z)\) for skalering langs de kardinale akser i 3D er givet ved:
- \(k_x\) er skaleringsfaktoren langs x-aksen.
- \(k_y\) er skaleringsfaktoren langs y-aksen.
- \(k_z\) er skaleringsfaktoren langs z-aksen.
Skalering i en Vilkårlig Retning¶
Skaleringsmatrixen \(S(\hat{n}, k)\) for skalering i en vilkårlig retning i 2D er:
Skaleringsmatrixen \(S(\hat{n}, k)\) for skalering i en vilkårlig retning i 3D er:
- \(\hat{n}\) er enhedsvektoren, der definerer retningen for skaleringen.
- \(k\) er skaleringsfaktoren.
Her er et udkast til dine noter om transformationsmatricer, nu med fokus på ortografisk projektion, skrevet på dansk og formateret i Markdown med LaTeX, uden referencer og i et format, du kan kopiere:
Ortografisk Projektion¶
Ortografisk Projektion langs Kardinalakser eller Planer¶
Projektion på en Kardinal Akse (2D)¶
Projektionsmatricen \(P_x\) for projektion på x-aksen er:
Projektionsmatricen \(P_y\) for projektion på y-aksen er:
Projektion på et Kardinal Plan (3D)¶
Projektionsmatricen \(P_{xy}\) for projektion på xy-planet er:
Projektionsmatricen \(P_{xz}\) for projektion på xz-planet er:
Projektionsmatricen \(P_{yz}\) for projektion på yz-planet er:
Ortografisk Projektion på en Vilkårlig Linje eller Plan¶
2D Projektion på en Vilkårlig Linje¶
Projektionsmatrixen \(P(\hat{n})\) for projektion på en vilkårlig linje er:
- \(\hat{n}\) er enhedsvektoren vinkelret på linjen, som vi projicerer på.
3D Projektion på et Vilkårligt Plan¶
Projektionsmatrixen \(P(\hat{n})\) for projektion på et vilkårligt plan er:
- \(\hat{n}\) er enhedsvektoren vinkelret på planet, som vi projicerer på.
Ja, her er et lille afsnit om at kombinere ortografiske projektioner, som kan indsættes i dine noter:
Kombination af Ortografiske Projektioner¶
Ortografiske projektioner kan kombineres ved at multiplicere de tilsvarende projektionsmatricer. Den resulterende matrix repræsenterer den samlede transformation, der opnås ved at anvende de individuelle projektioner i rækkefølge.
For eksempel, for at projicere et 3D-objekt først på xy-planet og derefter på x-aksen, kan den samlede projektionsmatrix beregnes som:
Hvor:
- \(P_{xy}\) er projektionsmatrixen for projektion på xy-planet.
- \(P_x\) er projektionsmatrixen for projektion på x-aksen.
Rækkefølgen af matrixmultiplikationen er afgørende, da matrixmultiplikation ikke er kommutativ. Den rækkefølge, projektionerne kombineres i, vil påvirke det endelige resultat.
Her er et udkast til dine noter om afsnit 5.4 om spejling (reflection), baseret på kilden Ch5.pdf, skrevet på dansk og formateret i Markdown med LaTeX:
Spejling (Reflection)¶
Spejling, også kendt som mirroring, er en transformation, der "vender" et objekt omkring en linje (i 2D) eller et plan (i 3D).
Spejling i 2D¶
I 2D kan spejling udføres omkring en akse, der går gennem origo. Hvis \(\hat{n}\) er en 2D enhedsvektor, er matricen, der udfører en spejling omkring aksen, der er vinkelret på \(\hat{n}\) og går gennem origo, givet ved:
Spejling i 3D¶
I 3D kan spejling udføres omkring et plan, der indeholder origo. Hvis \(\hat{n}\) er en 3D enhedsvektor, er matricen, der udfører en spejling omkring planet, der er vinkelret på \(\hat{n}\) og indeholder origo, givet ved:
Egenskaber ved Spejling¶
- Spejling kan kun udføres én gang: Hvis et objekt spejles igen (selv omkring en anden akse eller plan), vil objektet blive "vendt tilbage" til sin oprindelige orientering. Dette svarer til at have roteret objektet fra dets oprindelige position.
Skævning (Shearing)¶
Skævning er en transformation, der "vrider" koordinatsystemet og strækker det ujævnt. Vinkler bevares ikke, men arealer og volumener bevares overraskende nok. Grundideen er at tilføje et multiplum af den ene koordinat til den anden.
Skævning i 2D¶
I 2D kan en skævning udføres ved at tilføje et multiplum af y til x, så \(x' = x + sy\). Matricen, der udfører denne skævning, er:
Her angiver notationen \(H_x\), at x-koordinaten skævvrides af den anden koordinat, y. Parameteren \(s\) styrer mængden og retningen af skævheden.
Den anden 2D skævningsmatrix, \(H_y\), er:
Skævning i 3D¶
I 3D kan man tage en koordinat og tilføje forskellige multipla af denne koordinat til de to andre koordinater. Notationen \(H_{xy}\) indikerer, at x- og y-koordinaterne skævvrides af den anden koordinat, z. Disse matricer er givet ved:
Egenskaber ved Skævning¶
- Arealer og volumener bevares: Selvom vinkler ikke bevares, bevares arealer og volumener under en skævningstransformation.
- Kombination med skalering: Kombination af skævning og skalering (uniform eller non-uniform) skaber en transformation, der er umulig at skelne fra en transformation, der indeholder rotation og non-uniform skalering.
Kombination af Transformationer¶
Transformationer kan kombineres ved at multiplicere deres respektive matricer. Hvis transformation A repræsenteres af matrix A og transformation B repræsenteres af matrix B, så repræsenteres transformationen, der opnås ved at anvende A efterfulgt af B, af matrixproduktet AB.
Her er det vigtigt at bemærke, at rækkefølgen er afgørende, da matrixmultiplikation ikke er kommutativ. Det betyder, at AB generelt ikke er det samme som BA.
Eksempel: Model-View Transformation¶
I rendering kombineres model- og view-transformationer ofte. Modeltransformationen (\(M_{obj \rightarrow wld}\)) transformerer et objekts koordinater fra objekt-rum til verdensrum. View-transformationen (\(M_{wld \rightarrow cam}\)) transformerer koordinaterne fra verdensrum til kamera-rum.
Den samlede transformation fra objekt-rum til kamera-rum (\(M_{obj \rightarrow cam}\)) er givet ved:
Punktet i kamera-rum (\(p_{cam}\)) kan beregnes ved at transformere punktet i objekt-rum (\(p_{obj}\)) med den kombinerede matrix:
Geometrisk fortolkning¶
Rækkerne i en transformationsmatrix repræsenterer resultatet af at transformere standardbasisvektorerne. Når to transformationer kombineres (f.eks. AB), er rækkerne i den resulterende matrix AB resultatet af at transformere basisvektorerne i A med transformationen B.
Hvis A har rækkerne \(a_1\), \(a_2\) og \(a_3\), kan matrixproduktet AB skrives som:
Dette viser, at hver række i AB er resultatet af at transformere de tilsvarende basisvektorer i A med B.