1 Elementare Transformationen

Transcription

1 Elementare Transformationen
Elementare Transformationen:
Translation
Based on material
by Werner Purgathofer
Hearn/Baker 5.1-5.5, 5.8-5.15
Versetzt einen Punkt von einer Position P an einen Punkt
mit der Position P' mittels Translation des Vektors T
P´
x′ = x + t x
T
P
Notation:
P′ = P + T
 tx 
 x′ 
x 
P =  , P′ =  , T =  
y 
 y′ 
 ty 
Dieter Schmalstieg
Elementare Transformationen:
Translation
y′ = y + t y
Geometric Transformations
Elementare Transformationen: Rotation
FestkörperFestkörper-Transformation
Objekt wird transformiert, indem die
Grenzpunkte transformiert werden
Rotation des
Objekts um
einen Winkel θ
und um einen
Drehpunkt
(xr, yr)
P3
T
P2
P1
Dieter Schmalstieg
Geometric Transformations
Elementare Transformationen: Rotation
positiver Winkel ⇒ Rotation gegen den Uhrzeiger
x = r.cosφ
y = r.sinφ
x’ = r.cos(φ + θ)
= r.cosφ.cosθ − r.sinφ.sinθ
= x .cosθ − y .sinθ
y’ =
+ θ)
= r.cosφ.sinθ + r.sinφ.cosθ
r.sin(φ
Verwendung einer Transformationsmatrix
x′ = x cos θ − y sin θ
y′ = x sin θ + y cos θ
r
θ
r
φ
Geometric Transformations
Elementare Transformationen: Rotation
(x´,y´)
(x,y)
P′ = R⋅ P
 cos θ
with R = 
 sin θ
−sin θ 

cos θ 
 cos θ −sin θ  x   x cos θ − y sin θ

⋅   = 
R⋅P = 
 sin θ cos θ   y   x sin θ + y cos θ
x′ = x cosθ − y sin θ
y ′ = x sin θ + y cosθ
Dieter Schmalstieg
Dieter Schmalstieg
Geometric Transformations
Dieter Schmalstieg
Geometric Transformations
1
Elementare Transformationen: Skalierung
x′ = x ⋅ s x ,
y′ = y ⋅ s y
 x′   s x
  = 
 y′   0
0   x
⋅ 
s y   y 
P
P´= S ⋅ P
S
P´
Beispiel: eine Linie wird
skaliert, indem sx=sy=0.33, um
sie näher an den
Koordinatenursprung zu
bewegen
Dieter Schmalstieg
Transformationsmatrizen
 x′ =  sx 0  ⋅  x
  
 
 y′  0 sy   y
 x′  cos θ −sin θ x 
  =
 ⋅ 
 y′  sin θ cos θ  y
Rotation
X-Spiegelung
Translation
Uniforme Skalierung: sx=sy
NichtNicht-uniforme
Skalierung: sx≠sy
Fixpunkt:
Geometric Transformations
Skalierung
Elementare Transformationen: Skalieren
 x′ =  1 0  ⋅  x
  
 
 y′  0 −1   y
Dieter Schmalstieg
Geometric Transformations
Homogene Koordinaten (1)
Sehr oft h=1, z.B.
Geometric Transformations
Dieter Schmalstieg
 x′   1 0 tx   x 
  
  
 y′  =  0 1 t y  ⋅  y 
  
  
 1  0 0 1   1 
 x′   cos θ
  
 y′  =  sin θ
  
1  0
Skalierung
x

y

1





Auf diesem Weg können alle Transformationen
in Matrix-Form erfasst werden.
Dieter Schmalstieg
Homogene Koordinaten (2)
Rotation
 xh 


 x
Anstatt   verwendet  yh  mit x = xh/h, y = yh/h


 y man
 h 
(x' y') = (x+dx, y+dy) ... ?
Dieter Schmalstieg
Translation
(xf, yf)
 x′   s x
  
 y′  =  0
  
1 0
− sin θ 0   x 
  
cos θ 0  ⋅  y 
  
0
1  1 
0
sy
0
0  x
  
0 ⋅  y
  
1  1 
P′ = T(tx , ty ) ⋅ P
Geometric Transformations
Inverse Matrizen
−
Translation
T 1 (t x , t y ) = T ( − t x ,−t y )
Rotation
R 1 ( θ) = R( − θ)
Skalierung
S 1 ( s x , s y ) = S(1 / s x ,1 / s y )
P′ = R(θ) ⋅ P
−
−
P′ = S(sx , sy ) ⋅ P
Geometric Transformations
Dieter Schmalstieg
Geometric Transformations
2
Gemischte Transformationen (1)
Gemischte Transformationen(2)
n Transformationen werden nacheinander
auf einen Punkt P angewendet, diese
werden anhand M1, M2, ..., Mn dargestellt.
P(n) = (Mn⋅ ... (M2⋅(M1⋅P) ) ... )
P’ = M1⋅P
P’’ = M2⋅P’
...
P(n) = Mn⋅P (n-1)
kürzer:
Matrizenmulitplikationen sind assoziativ:
(M1 · M2) · M3 = M1 · (M2 · M3)
(aber nicht kommutativ: M1⋅M2 ≠ M2⋅M1 )
P(n) = (Mn⋅ ...(M2⋅(M1⋅P) ) ... )
Dieter Schmalstieg
Geometric Transformations
Dieter Schmalstieg
Geometric Transformations
Transformationen sind nicht kommutativ!
gemischte Transformationen (3)
Eine umgekehrte Reihenfolge der Abfolge der
Transformationen könnte eine Auswirkung auf die
Position des transformierten Objektes haben.
In (a) wird das Objekt zuerst versetzt, dann rotiert.
In (b) wird das Objekt zuerst rotiert, dann versetzt.
P(n) = (Mn⋅ ... (M2⋅(M1⋅P) ) ... )
(a)
(b)
Matrizenmultiplikationen sind assoziativ:
(M1 · M2) · M3 = M1 · (M2 · M3)
(aber nicht kommutativ: M1⋅M2 ≠ M2⋅M1 )
Daher können alle Transformationen
folgendermaßen geschrieben
Mn⋅ ... ⋅Mwerden:
2⋅M1
P(n) = ( Mn⋅ ... ⋅M2⋅M1 ) ⋅P
konstant für alle Bilder, Objekte, etc.!!!
Dieter Schmalstieg
Geometric Transformations
Dieter Schmalstieg
Geometric Transformations
Gemischte Transformationen (4)
Gemischte Transformationen (5)
Einfache gemischte Transformationen
Rotation um allgemeinen Drehpunkt
Gemischte Translation:
T ( t x 2 , t y 2 ) ⋅ T ( t x1 , t y 1 ) = T ( t x 1 + t x 2 , t y 1 + t y 2 )
T ( xr , y r ) ⋅ R (θ ) ⋅ T ( − xr ,− y r ) = R ( xr , y r ,θ )
Gemischte Rotation:
R (θ 2 ) ⋅ R (θ1 ) = R (θ1 + θ 2 )
Gemischte Skalierung:
S ( s x 2 , s y 2 ) ⋅ S ( s x1 , s y1 ) = S ( s x1 ⋅ s x 2 , s y1 ⋅ s y 2 )
Dieter Schmalstieg
Geometric Transformations
Ursprüngliche Translation
Position und des Objekts,
Drehpunkt ist
Drehpunkt
im Ursprung
Dieter Schmalstieg
Rotation um
den Ursprung
Translation,
sodass der
Drehpunkt
zurückkehrt
Geometric Transformations
3
Gemischte Transformationen (6)
allgemeine FixpunktFixpunkt-Skalierung
Gemischte Transformationen (7)
Allgemeine Skalierungsrichtungen
−
R 1 (θ ) ⋅ S ( s1 , s2 ) ⋅ R (θ )
T ( x f , y f ) ⋅ S ( s x , s y ) ⋅ T ( − x f ,− y f ) = S ( x f , y f , s x , s y )
originale
Position und
Fixpunkt
Translation
des Objekts,
Fixpunkt ist
im Ursprung
Dieter Schmalstieg
Translation
Objekt wird
so, dass der
unter
rücksicht des Fixpunkt
zurückkehrt
Ursprungs
skaliert
Geometric Transformations
AusgangsPosition
1.
2.
3.
Dieter Schmalstieg
M = M3 ⋅ M2 ⋅ M1
Spiegelung
um yy-Achse:
Geometric Transformations
Beispiel (2)
M = M3 ⋅ M2 ⋅ M1 =
 2 0 0   cos 45 −sin 45 0  1 0 3 
 


 
=  0 1 0  ⋅  sin 45 cos 45 0 ⋅  0 1 4  =

 
0
0
1  0 0 1 
 0 0 1 
 2 0 0   cos 45 −sin 45 3cos 45 − 4sin 45 
 


=  0 1 0  ⋅  sin 45 cos 45 3sin 45 + 4cos 45  =

 

0
0
1
 0 0 1 

 2cos 45 −2sin 45 6cos 45 − 8sin 45 


=  sin 45 cos 45 3sin 45 + 4cos 45 


0
0
1


0
0

1
Geometric Transformations
0 0

−
0
1 0



 0 0 1
Dieter Schmalstieg
Geometric Transformations
Beispiel
um xx-Achse: Rfx=  1
 −1 0 0


 0 1 0
Rfy=  0 0 1 
Rotation
zurück
um -45°
Nach (1,2)
Skalierung
Dieter Schmalstieg
Beispiel (1)
Translation von (3,4), dann Rotation um 45°und dann
vergrößern um den Faktor 2 in x-Richtung
1 0 3 


M1 = T(3,4) =  0 1 4 


 0 0 1
 cos 45 −sin 45

M2 = R(45°) =  sin 45 cos 45


0
0
2 0 0 


M3 = S(2,1) =  0 1 0 


 0 0 1
Nach 45°
Rotation
Spiegelung um die Achse mit Winkel α
=
α
Dieter Schmalstieg
Geometric Transformations
Dieter Schmalstieg
Geometric Transformations
4
Spiegelung um α-Achse
1. Rotation um −α
2. spiegeln um x-Achse
3. Rotation um +α
=
α
1.
2.
+
−α
3.
+
+α
Bsp: Spiegelung um die Achse mit Winkel α
 cos(−
−α)) −sin(−
−α)) 0

−α) =  sin(−
1. M1 = R(−
−α)) cos(−
−α)) 0



0
0
1
1 0 0 


2. M2 = S(1,−1) =  0 −1 0 


 0 0 1
 cosα −sinα 0


3. M3 = R(α) =  sinα cosα 0



0
0 1
1.
2.
3.
P’ = M3 ⋅ ( M2 ⋅ ( M1 ⋅ P ) ) = ( M3 ⋅ M2 ⋅ M1 ) ⋅ P
Dieter Schmalstieg
Geometric Transformations
Dieter Schmalstieg
Bsp: Spiegelung um die Achse mit Winkel α
M3 ⋅ M2 ⋅ M1 =
−sinα
cosα
=
0
 cosα sinα

=  sinα −cosα

0
0

=
 cosα

 sinα

0

0  1 0 0   cos(−α) −sin(−α) 0
 

 
0 ⋅  0 −1 0  ⋅  sin(−α) cos(−α) 0 =
 
 
1  0 0 1   0
0
1
0  cosα sinα 0

 
0 ⋅  −sinα cosα 0 =
1  0
0 1
 cos2α−sin2α

 2sinαcosα

0

2sinαcosα 0  cos2α
α sin2α
α 0



sin2α−cos2α 0 =  sin2α
α −cos2α
α 0
0
1  0
0 1
Dieter Schmalstieg
Geometric Transformations
Rechnerische Effizienz
Allgemeine zweizwei-dimensionale Transformation
 x′   rs xx
  
 y ′  =  rs yx
  
1  0
trs x   x 
  
trs y  ⋅  y 
  
1  1
Dieter Schmalstieg
Geometric Transformations
Spiegelung an einer
allgemeinen Line
Spiegelung unter Beachtung der Linie y=mx+b
RfO (=R(180º)) =
T(0,b) ⋅ R(θ) ⋅ Rfx ⋅ R(−θ) ⋅ T(0,-b)
 −1 0 0


 0 −1 0


0 1
0
Dieter Schmalstieg
rs xy
rs yy
0
x ′ = x ⋅ rs xx + y ⋅ rs xy + trs x
y ′ = x ⋅ rs yx + y ⋅ rs yy + trs y
Andere Transformationen:
Spiegelung um einen Punkt
Spiegelung um den Ursprung
Geometric Transformations
m = tan(θ)
Geometric Transformations
Dieter Schmalstieg
Geometric Transformations
5
Andere Transformationen: Scherung (1)
X-Richtung Scherung
Entlang der xx-Achse
Referenzlinie y=0
 1 shx 0 


 0 1 0


 0 0 1
Dieter Schmalstieg
Geometric Transformations
Andere Transformationen: Scherung (3)
Allgemeine YY-Richtung
Scherung
Entlang YY-Achse
Referenzlinie x=xref
 1

 shy

 0
Dieter Schmalstieg
Andere Transformationen: Scherung (2)
Allgemeine XX-Richtung
Scherung
entlang XX-Achse
Referenzlinie y=yref
Dieter Schmalstieg
Geometric Transformations
M xy, x′y′ = R( − θ) ⋅ T ( − x0 ,− y0 )
Ein kartesisches x’y’ System
bei (x0,y0) positioniert mit
Richtung θ in einem xy
kartesischem System
Dieter Schmalstieg
Affine Transformationen
x ′ = a xx x + a xy y + bx
y ′ = a yx x + a yy y + by
− shx ⋅ yref 

0


1

Transf. zwischen Koordinatensystemen
0
0


1 − shy ⋅ xref 

0
1

Geometric Transformations
 1 shx

0 1

0 0
Position der Referenzframes
nach der Tranlation der
Ursprung des x'y' Systems
zum Koordinatenursprung
des xy Systems Geometric Transformations
3D Transformationen
Alle Konzepte können direkt in 3D angewendet
werden
+ Projektionen 3D 2D
Parallele Linien ⇒ parallele Linien
Endpunkte ⇒ Endpunkte
Jede affine Transformation ist eine Kombination aus
Translation, Rotation, Skalierung, Spiegelung,
Scherung
Affine Transformation welche nur aus Translation,
Rotation, Spiegelung besteht:
Winkel, längeerhaltend
Dieter Schmalstieg
Geometric Transformations
Dieter Schmalstieg
Geometric Transformations
6
3D Translation (1)
3D Translation (2)
Translationsvektor (tx, ty, tz)
x′ = x + tx ,
 x′  1
 y′ 0
 =
 z′  0
 1  0
  
0
1
0
0
Objekte werden versetzt indem die
Grenzpunkte versetzt werden
y′ = y + ty , z′ = z + tz
Lineare Transformationen:
0 tx   x
0 t y   y
⋅ 
1 tz   z 
0 1  1 
M(aP+bQ)=aMP+bMQ
Inverse:
−
T 1 (tx , ty , tz ) = T( −tx ,−ty ,−tz )
P ′ = T(tx , ty , tz ) ⋅ P
Dieter Schmalstieg
Geometric Transformations
3D Rotation: Winkelorientierung
Rotationsachse
positiver Winkel ⇒ Rotation gegen Uhrzeiger
Dieter Schmalstieg
Geometric Transformations
3D Rotation um Hauptachse (z(z-Achse)
x′ = x cos θ − y sin θ
y′ = x sin θ + y cos θ
z′ = z
 x′ cos θ − sin θ
 y′  sin θ cos θ
 =
0
 z′   0
1  0
0
  
0 0  x 
0 0  y
⋅ 
1 0  z 
0 1  1 
P ′ = R z ( θ) ⋅ P
Dieter Schmalstieg
Geometric Transformations
3D Rotation um Hauptachse (x(x-Achse)
0
 x′  1 0
 y′ 0 cos θ − sin θ
 =
 z′  0 sin θ cos θ
 1  0 0
0
  
Dieter Schmalstieg
3D Rotation um Hauptachse (y(y-Achse)
 x′  cos θ
 y′ 
0
 =
′
 z   − sin θ
1 
0
  
0  x 
0  y
⋅ 
0  z 
1  1 
P′ = Rx (θ
θ) ⋅ P
Dieter Schmalstieg
Geometric Transformations
Geometric Transformations
0 sin θ 0  x
1 0 0  y
⋅ 
0 cos θ 0  z 
0
0 1  1 
P ′ = Ry (θ
θ)⋅ P
Dieter Schmalstieg
Geometric Transformations
7
Urspr.
ObjektPosition
2. Rotation
durch
Winkel θ
1.Translation
Rotationsachse
um die xAchse: T
3.Translation
Rotationsachse
an originale
Position:T-1
Dieter Schmalstieg
−
R( θ) = T 1 ⋅ Rx ( θ ) ⋅ T
3D Rotation: Achse parallel zur xx-Achse
Geometric Transformations
3D Rotation entlang beliebiger Achse
3D Rotation entlang beliebiger Achse
Die Rotationsachse (gestrichelte Linie) ist
definiert durch die Punkte P1 und P2. Die
Richtung des Achseneinheitsvektors u ist
bestimmt durch eine spezifische Richtung.
u=
Dieter Schmalstieg
P2 − P1
= ( a , b, c )
P2 − P1
Geometric Transformations
3D Rotation entlang beliebiger Achse
Schritt 1: Translation T(T(-x1,-y1,-z1)
Anfangsposition
1. versetze P1
zum Ursprung
1
0
T ( − x1 ,− y1 ,− z1 ) = 
0
0

2. rotiere P2’
auf z-Achse
0
1
0
0
0 − x1 
0 − y1 

1 − z1 
0
1
3. rotiere Objekt
um z-Achse
4. rotiere Achse zur
Ursprungsrichtung
Dieter Schmalstieg
5. Versetze Achse zur
Ursprungsposition
Geometric Transformations
3D Rotation entlang beliebiger Achse
Anfangsposition
1. versetze P1
zum Ursprung
2. rotiere P2’
auf z-Achse
3. rotiere Objekt
um z-Achse
Dieter Schmalstieg
3D Rotation entlang beliebiger Achse
Schritt 2: Rotation sodass u mit zz-Achse
übereinstimmt (erledigt mit 2 Rotationen)
Rx(α): u → xz
xz--Ebene
Ry(β ): u → z-Achse
2a:
2b:
α
4. rotiere Achse zur
Ursprungsrichtung
Dieter Schmalstieg
Geometric Transformations
β
5. Versetze Achse zur
Ursprungsposition
Geometric Transformations
Dieter Schmalstieg
Geometric Transformations
8
3D Rotation entlang beliebiger Achse
Schritt 2a:
u = (a , b, c)
u′ = ( 0,b,c)
Schritt 2b:
u′ = d = b2 + c2
cos α = c/d
3D Rotation entlang beliebiger Achse
1 0 y 0
0 c /d − b / d
d
Rx (α ) = b
d c /d
0 b /α
z0 c0
0

u′ = ( 0,b,c)
u′ = d
u′′ = (a,0,d)
0
0

0
1
cos β = d
sin β = -a
βd
0
d
Ry ( β ) = 
a
z0

x
0 − a 0
1
1 0 0

0 a d 0
0 0 1
α
Dieter Schmalstieg
Geometric Transformations
3D Rotation entlang beliebiger Achse
Anfangsposition
1. versetze P1
zum Ursprung
2. rotiere P2’
auf z-Achse
3. rotiere Objekt
um z-Achse
4. rotiere Achse zur
Ursprungsrichtung
Dieter Schmalstieg
Dieter Schmalstieg
Geometric Transformations
3D Rotation entlang beliebiger Achse
Schritt 3:
u abgestimmt mit zz-Achse
Rotation um zz-Achse
cos θ − sin θ
 sin
θ cos θ
Rz (θ ) = 
0
 0
 0
0

0 0
0 0

1 0
0 1
5. Versetze Achse zur
Ursprungsposition
Geometric Transformations
3D Rotation entlang beliebiger Achse
Dieter Schmalstieg
Geometric Transformations
3D Rotation entlang beliebiger Achse
Schritt 4: Rotation aus Schritt 2 rückgängig
Schritt 5: Translation aus Schritt 1 rückgängig
Anfangsposition
1. versetze P1
zum Ursprung
2. rotiere P2’
auf z-Achse
−
Schritte: 5
3. rotiere Objekt
um z-Achse
−
−1
−1
−
R ( θ ) = T 1 ⋅ R x ( α) ⋅ R y ( β ) ⋅ R z( θ ) ⋅ R y( β ) ⋅ R x( α) ⋅ T
4a
4b
3
2b
2a
1
Inverse Rotation:
4. rotiere Achse zur
Ursprungsrichtung
Dieter Schmalstieg
5. Versetze Achse zur
Ursprungsposition
Geometric Transformations
−1
Rx ( θ) = Rx ( − θ ) = Rx ( θ )
Dieter Schmalstieg
T
Geometric Transformations
9
3D Skalierung mit beliebigem Fixpunkt
3D Skalierung um Ursprung
 x′ sx
 y′  0
 =
 z′   0
1 0
  
Verdopple die
Objektgröße und
entferne es vom
Ursprung
0
sy
0
0
0
0
sz
0
0  x
0  y
⋅ 
0  z 
1  1 
P′ = S ⋅ P
Dieter Schmalstieg
Geometric Transformations
1. T
T ( x F , y F , z F ) ⋅ S ( s x , s y , s z ) ⋅ T ( − x F ,− y F ,− z F )
2. S
3. T-1
Dieter Schmalstieg
Geometric Transformations
3D Spiegelung
3D Skalierung mit beliebigem Fixpunkt
Spiegelung um
Punkt
Linie (180°
(180°Rotation)
Rotation)
Ebene, z.B., xyxy-Ebene: RFz
T ( x f , y f , z f ) ⋅ S ( s x , s y , s z ) ⋅ T ( − x f ,− y f ,− z f )
 sx
0

0
0

0
sy
0
0
0 (1 − s x ) x f 
0 (1 − s y ) y f 

s z (1 − s z ) z f 

0
1

Dieter Schmalstieg
P'(a,b,-c)
P(a,b,c)
1
0
RFz = 
0
0

0
1
0
0
0
0
−1
0
0
0

0
1
Relative Spiegelung zur xy-Ebene
Geometric Transformations
Dieter Schmalstieg
Geometric Transformations
3D Scherung
Beispiel: relative Scherung
zur z-Achse mit a=b=1
b
1
0
SH z = 
0
0

0 a 0
1 b 0

0 1 0
0 0 1
a
Dieter Schmalstieg
Geometric Transformations
10