3.1 Konsep Transformasi
Transformasi artinya menggerakkan obyek. Ada 2 macam transformasi, yaitu:
1. Transformasi geometri sistem koordinat diam & obyek bergerak (gerak obyek secara umum).
2. Transformasi koordinat sistem koordinat bergerak & obyek diam (pembuatan film, kamera digerakkan
di atas rel, pemainnya diam).
Kedua transformasi ini saling inverse
Cukup dibahas satu tipe saja yaitu transformasi geometri
Transformasi koordinat sebagai inverse.
3.1 Konsep Transformasi
Transformasi artinya menggerakkan obyek. Ada 2 macam transformasi, yaitu:
1. Transformasi geometri sistem koordinat diam & obyek bergerak (gerak obyek secara umum).
2. Transformasi koordinat sistem koordinat bergerak & obyek diam (pembuatan film, kamera digerakkan
di atas rel, pemainnya diam).
Kedua transformasi ini saling inverse
Cukup dibahas satu tipe saja yaitu transformasi geometri
Transformasi koordinat sebagai inverse.
Transformasi dibagi 2 kelompok besar:
1. Transformasi Dasar yang terdiri dari:
Translasi dengan vektor arah v = ai + bj Rotasi terhadap titik (0,0)
Scaling terhadap titik (0,0)
Pencerminan terhadap sumbu x atau sumbu y Shearing/Deformasi
2. Transformasi Lanjut yang terdiri dari:
Rotasi terhadap titik (a,b) Scaling terhadap titik (a,b)
Pencerminan terhadap garis y = a, x = a atau y = mx + b
Catatan:
Transformasi lanjut dicirikan tersusun dari beberapa
Transformasi dibagi 2 kelompok besar:
1. Transformasi Dasar yang terdiri dari:
Translasi dengan vektor arah v = ai + bj Rotasi terhadap titik (0,0)
Scaling terhadap titik (0,0)
Pencerminan terhadap sumbu x atau sumbu y Shearing/Deformasi
2. Transformasi Lanjut yang terdiri dari:
Rotasi terhadap titik (a,b) Scaling terhadap titik (a,b)
Pencerminan terhadap garis y = a, x = a atau y = mx + b
Catatan:
Transformasi sebenarnya adalah operasi vektor.
Vektor dapat alih-alih sebagai matrik
So: Transformasi direpresentasikan sebagai operasi matrik.
Penyeragaman bentuk matrik.
- Semua operasi transformasi 2 dimensi direprsentasikan dengan matrik 3x3,
T11 T12 T13
T21 T22 T23
x
y
1 T21 T22 T23
T31 T32 T33
- koordinat titik (x,y) direpresentasikan
dengan matri 3 x 1:
Prinsip operasi transformasi adalah perkalian matrik,
kolom matrik pertama harus sama dgn baris matrik kedua.
3.2 Konsep Obyek 2 Dimensi
Obyek adalah kumpulan dari koordinat titik. Ada 2 macam obyek, yaitu:
Obyek bersegi-N yaitu obyek yang berbentuk segi-N.
Obyek ini dapat diwakili oleh koordinat titik-titik sudutnya Direpresentasikan dengan matrik 3 x N
X1 X2 …. Xn X1 X2 …. Xn
Y1 Y2 …. Yn
1 1 1 1
Type obyek adalah:
Matrik3N = array[1..3, 1..N] of real
Data obyek diisikan dalam StringGrid dengan FixedCol = 1, FixedRow = 0, RowCount = 2 dan ColCount = N+1
Agar dalam StringGrid tampak kata x dan y maka dibuat procedure FormCreate pada Form1.
Klik 2 kali pada tempat kosong Form dan ketikkan:
procedure TForm1.FormShow(Sender: TObject); begin
StringGrid1.Cells[0,0] := ‘x’; StringGrid1.Cells[0,1] := ‘y’; end;
Kolom StringGrid menyatakan banyaknya titik sudut (segi N) Klik 2 kali StringGrid1 dan ketikkan
procedure TForm1.StringGrid1Click(Sender: TObject); begin
N := StrToInt(edN.Text);
StringGrid1.ColCount := N + 1; end;
Agar dalam StringGrid tampak kata x dan y maka dibuat procedure FormCreate pada Form1.
Klik 2 kali pada tempat kosong Form dan ketikkan:
procedure TForm1.FormShow(Sender: TObject); begin
StringGrid1.Cells[0,0] := ‘x’; StringGrid1.Cells[0,1] := ‘y’; end;
x
y
Procedure Obyek2D (var Obyek : matrik3N); Var
i, j : integer; Begin
N := StrToInt (Form1.edN.Text); For i := 1 to 2 do
For j := 1 to N do
Obyek [i,j] :=StrToFloat(Form1.StringGrid1.Cells[j,i-1]); For j := 1 to N do
Obyek [3, j ] := 1; End;
Untuk mengambil nilai obyek dari StringGrid digunakan procedure tak standar dengan nama Obyek2D.
Procedure Obyek2D (var Obyek : matrik3N); Var
i, j : integer; Begin
N := StrToInt (Form1.edN.Text); For i := 1 to 2 do
For j := 1 to N do
Obyek [i,j] :=StrToFloat(Form1.StringGrid1.Cells[j,i-1]); For j := 1 to N do
Untuk menggambar obyek dibentuk procedure tak standar sbb.
Form1.Canvas.MoveTo(trunc(X0 + Obyek[1,N]), trunc(Y0 - Obyek[2,N])); Form1.Canvas.LineTo(trunc(X0 + Obyek[1,1]),
trunc(Y0 - Obyek[2,1])); end;
Untuk menggambar obyek dibentuk procedure tak standar sbb.
procedure GambarObyek2D;
Form1.Canvas.MoveTo(trunc(X0 + Obyek[1,N]), trunc(Y0 - Obyek[2,N])); Form1.Canvas.LineTo(trunc(X0 + Obyek[1,1]),
trunc(Y0 - Obyek[2,1]));
Obyek kontinyu (lingkaran, ellips, bola, sinus, dan sebagainya).
Obyek ini harus diwakili oleh semua titik penyusun obyek.
Tidak dapat direpresentasikan dgn matrik obyek bersegi-N,
Direpresentasikan sebagai matrik dari semua titik penyusun
Cara pengoperasiannya dengan perulangan sepanjang keliling bangun tersebut.
Obyek kontinyu (lingkaran, ellips, bola, sinus, dan sebagainya).
Obyek ini harus diwakili oleh semua titik penyusun obyek.
Tidak dapat direpresentasikan dgn matrik obyek bersegi-N,
Direpresentasikan sebagai matrik dari semua titik penyusun
Dalam pemrograman grafik dikenal 2 jenis perkalian matrik:
Perkalian matrik 3 x 3 dengan matrik 3 x 3
(perkalian matrik antar operator transformasi)
Perkalian matrik 3 x 3 dengan matrik 3 x N
(perkalian matrik antara operator dengan obyek).
Perkalian antar operator ditulis dalam procedure tak standar tanpa Form1 karena tidak memanggil nilai komponen Delphi. Procedure ini tidak perlu didaftarkan di kelompok type.
3.3 PERKALIAN MATRIK 2 DIMENSI
Perkalian antar operator ditulis dalam procedure tak standar tanpa Form1 karena tidak memanggil nilai komponen Delphi. Procedure ini tidak perlu didaftarkan di kelompok type.
Operator transformasi bertype
matrik33 = array[1..3, 1..3] of real
Procedure MatrikKaliTransformasi2D (var Tr1 : matrik33; Tr2 : matrik33);
Var
i, j, k : integer; Hasil : matrik33; Begin
Hasil[i, k] := Hasil[i,k] + Tr1[i,j] * Tr2[j,k]; End;
Tr1 := Hasil; End;
Hasil perkalian Tr1 dengan Tr2 diletakkan di variable Tr1.
Procedure MatrikKaliTransformasi2D (var Tr1 : matrik33; Tr2 : matrik33);
Var
i, j, k : integer; Hasil : matrik33; Begin
Hasil[i, k] := Hasil[i,k] + Tr1[i,j] * Tr2[j,k]; End;
Tr1 := Hasil; End;
Perkalian antara operator dengan obyek ditulis dalam procedure tak standar tanpa Form1.
Procedure MatrikKaliTransforObyek2D(var Obyek : matrik3N; Tr : matrik33);
Var
i, j, k : integer; Hasil : matrik3N; Begin
Hasil[i,k] := Hasil[i,k] + Tr[i,j] * Obyek[j,k]; End;
Obyek := Hasil; End;
Hasil perkalian Tr dengan Obyek diletakkan di variable Obyek.
Perkalian antara operator dengan obyek ditulis dalam procedure tak standar tanpa Form1.
Procedure MatrikKaliTransforObyek2D(var Obyek : matrik3N; Tr : matrik33);
Var
i, j, k : integer; Hasil : matrik3N; Begin
Hasil[i,k] := Hasil[i,k] + Tr[i,j] * Obyek[j,k]; End;
Obyek := Hasil; End;
Hasil perkalian Tr dengan Obyek diletakkan di variable Obyek.
Sifat translasi: x’ = x + a
y’ = y + b
3.4.1.Translasi 2D Tv
Perpindahan obyek dengan vektor arah v = a i + b j. a = besarnya perpindahan pada sumbu x b = besarnya perpindahan pada sumbu y
v = a i + b j
P’(x’, y’)
3.4 Transformasi Geometri Dasar
Sifat translasi: x’ = x + a
y’ = y + b
v = a i + b j
P(x, y)
(0,0)
x x’ x + a
P(x,y) = y P’(x’,y’) = y’ = y + b
1 1 1
Persamaan matriknya: P’ = Tv o P 3 x 1 3 x 3 3 x 1
x + a T11 T12 T13 x
y + b = T21 T22 T23 o y
1 T31 T32 T33 1
x + a T11. x + T12. y + T13. 1
y + b = T21. x + T22. y + T23. 1
1 T31. x + T32. y + T33. 1 1 T31. x + T32. y + T33. 1
Dari persamaan antar sel diperoleh nilai:
T11 = 1 T12 = 0 T13 = a
T21 = 0 T22 = 1 T23 = b
T31 = 0 T32 = 0 T33 = 1 1 0 a
Tv = 0 1 b
0 0 1
4/19/2013 14
Komputer grafik widjianto
Procedure MatrikTranslasi2D (var Tv : matrik33; a, b : real);
Sedang procedure translasi terhadap suatu obyek dituliskan:
Procedure TForm1.btTranslasiObyekClick(Sender: Tobject); Begin
a := StrToFloat(eNilaiA.Text); b := StrToFloat(eNilaiB.Text); Obyek2D(Obyek);
MatrikTranslasi2D(Tv, a, b);
MatrikKaliTransforObyek2D(Obyek,Tv); GambarObyek2D;
Procedure MatrikTranslasi2D (var Tv : matrik33; a, b : real); Begin
Tv[1,1] := 1 ; Tv[1,2] := 0 ; Tv[1,3] := a ; Tv[2,1] := 0 ; Tv[2,2] := 1 ; Tv[2,3] := b ; Tv[3,1] := 0 ; Tv[3,2] := 0 ; Tv[3,3] := 1 ;
End;
Sedang procedure translasi terhadap suatu obyek dituliskan:
Procedure TForm1.btTranslasiObyekClick(Sender: Tobject); Begin
a := StrToFloat(eNilaiA.Text); b := StrToFloat(eNilaiB.Text); Obyek2D(Obyek);
MatrikTranslasi2D(Tv, a, b);
Catatan:
-Translasi dari titik (x1, y1) ke titik (x2, y2) ditentukan oleh vektor arah
v = (x2 – x1) i + (y2 – y1) j dimana a = x2 – x1 dan b = y2 –y1.
-Translasi dari titik (0, 0) ke titik (x1, y1) ditentukan oleh vektor arah
v = (x1) i + (y1) j dimana a = x1 dan b = y1.
- Translasi dari titik (x1, y1) ke titik (0, 0) ditentukan oleh vektor arah
v = (-x1) i + (-y1) j dimana a = - x1 dan b = - y1.
Catatan:
-Translasi dari titik (x1, y1) ke titik (x2, y2) ditentukan oleh vektor arah
v = (x2 – x1) i + (y2 – y1) j dimana a = x2 – x1 dan b = y2 –y1.
-Translasi dari titik (0, 0) ke titik (x1, y1) ditentukan oleh vektor arah
v = (x1) i + (y1) j dimana a = x1 dan b = y1.
- Translasi dari titik (x1, y1) ke titik (0, 0) ditentukan oleh vektor arah
v = (-x1) i + (-y1) j dimana a = - x1 dan b = - y1.
3.4.2 Rotasi Terhadap Titik (0,0)
Ro,α
P’(x’,y’)
P(x,y)
Y
r r
y’
- Sudut rotasi positif jika unclockwise - Sudut putar diubah ke dalam radian.
P(x,y) dlm bentuk trigonometri:
x = r cos ∂ dan y = r sin ∂
- Memutar obyek dengan titik putar (0,0).
P(x,y)
X y
r
x (0,0) x’
∂ α
Sedangkan titik P’(x’,y’) dalam bentuk trigonometri:
x’ = r cos (α + ∂) = r cos α cos ∂ - r sin α sin ∂ = x cos α - y sin α
Persamaan matriknya: P’ = Ro,α o P 3 x 1 3 x 3 3 x 1
x cos α - y sin α R11 R12 R13 x
x sin α + y cos α = R21 R22 R23 o y
1 R31 R32 R33 1
x cos α - y sin α R11. x + R12. y + R13. 1
x sinα + y cos α = R21. x + R22. y + R23. 1
1 R31. x + R32. y + R33. 1 1 R31. x + R32. y + R33. 1
Dari persamaan antar sel diperoleh:
R11 = cos α R12 = - sin α R13 = 0 R21 = sin α R22 = cos α R23 = 0
R31 = 0 R32 = 0 R33 = 1 Ro,α = cos αsin α cos α- sin α 00
0 0 1
Sehingga matrik rotasi:
procedure MatrikRotasi2D (var R : matrik33; sudut : real);
var
Radian : real;
begin
procedure TForm1.btRotasiObyekClick(Sender: Tobject); Begin
Sudut := StrToFloat(eSudut.Text); Obyek2D(Obyek);
MatrikRotasi2D(R, sudut);
MatrikKaliTransforObyek2D(Obyek , R); GambarObyek2D;
procedure MatrikRotasi2D (var R : matrik33; sudut : real);
var
Radian : real;
begin
procedure TForm1.btRotasiObyekClick(Sender: Tobject); Begin
Sudut := StrToFloat(eSudut.Text); Obyek2D(Obyek);
MatrikRotasi2D(R, sudut);
MatrikKaliTransforObyek2D(Obyek , R); GambarObyek2D;
P(x’,y’) Y
So,sx,sy
3.4.3 Scaling Terhadap Titik (0,0)
So,sx,sy
- Mengubah ukuran obyek dengan acuan titik (0,0). - sx = faktor scaling pada sumbu x
- sy = faktor scaling pada sumbu y
Sifat scaling
x’ = sx . x & y’ = sy. y
X (0,0)
P(x,y)
So,sx,sy
Persamaan matriknya: P’ = So,sx,sy o P 3 x 1 3 x 3 3 x 1
Sifat scaling
x’ = sx . x & y’ = sy. y
sx . x S11 S12 S13 x
sy . y = S21 S22 S23 o y
1 S31 S32 S33 1
sx . x S11. x + S12. y + S13. 1
sy . y = S21. x + S22. y + S23. 1
1 S31. x + S32. y + S33. 1
Dari persamaan antar sel diperoleh:
S11 = sx S12 = 0 S13 = 0
S21 = 0 S22 = sy S23 = 0
S31 = 0 S32 = 0 S33 = 1
sx 0 0
So,sx,sy = 0 sy 0
0 0 1
procedure MatrikScaling2D (var S : matrik33; sx, sy : real);
Sedangkan procedure scaling terhadap suatu obyek:
procedure TForm1.btScalingObyekClick(Sender: Tobject); Begin
Sx := StrToFloat(eSkalaX.Text); Sy := StrToFloat(eSkalaY.Text); Obyek2D(Obyek);
MatrikScaling2D(S, sx, sy);
MatrikKaliTransforObyek2D(Obyek , S); GambarObyek2D;
end;
procedure MatrikScaling2D (var S : matrik33; sx, sy : real);
begin
S[1,1] := sx ; S[1,2] := 0 ; S[1,3] := 0 ; S[2,1] := 0 ; S[2,2] := sy ;S[2,3] := 0 ; S[3,1] := 0 ; S[3,2] := 0 ; S[3,3] := 1 ; end;
Sedangkan procedure scaling terhadap suatu obyek:
procedure TForm1.btScalingObyekClick(Sender: Tobject); Begin
Sx := StrToFloat(eSkalaX.Text); Sy := StrToFloat(eSkalaY.Text); Obyek2D(Obyek);
MatrikScaling2D(S, sx, sy);
MatrikKaliTransforObyek2D(Obyek , S); GambarObyek2D;
end;
3.4.4 Pencerminan
:
P(x, y)
P’(x’, y’)
X Y
(0,0)
Sifat pencerminan terhadap sb x: x’ = x dan y’ = -y
Persamaan matriknya: P’ = Mx o P
3 x 1 3 x 3 3 x 1 Pencerminan terhadap sumbu x : Mx
x Mx11 Mx12 Mx13 x
- y = Mx21 Mx22 Mx23 o y
1 Mx31 Mx32 Mx33 1
x Mx11. x + Mx12. y + Mx13. 1
Dari persamaan antar sel diperoleh:
procedure MatrikPencerminanSumbuX (var Mx : matrik33);
begin
Mx[1,1] := 1 ; Mx[1,2] := 0 ; Mx[1,3] := 0 ; Mx[2,1] := 0 ; Mx[2,2] := -1 ; Mx[2,3] := 0 ; Mx[3,1] := 0 ; Mx[3,2] := 0 ; Mx[3,3] := 1 ; end;
procedure TForm1.btCerminXObyekClick(Sender: Tobject);
begin
Obyek2D (Obyek);
MatrikPencerminanSumbuX (Mx);
MatrikKaliTransforObyek2D (Obyek , Mx); GambarObyek2D;
end;
procedure MatrikPencerminanSumbuX (var Mx : matrik33);
begin
Mx[1,1] := 1 ; Mx[1,2] := 0 ; Mx[1,3] := 0 ; Mx[2,1] := 0 ; Mx[2,2] := -1 ; Mx[2,3] := 0 ; Mx[3,1] := 0 ; Mx[3,2] := 0 ; Mx[3,3] := 1 ; end;
procedure TForm1.btCerminXObyekClick(Sender: Tobject);
begin
Obyek2D (Obyek);
MatrikPencerminanSumbuX (Mx);
MatrikKaliTransforObyek2D (Obyek , Mx); GambarObyek2D;
-
Pencerminan terhadap sumbu y : My
P(x, y) P’(x’, y’)
X Y
(0,0)
Sifat pencerminan terhadap sumbu y: x’ = - x dan y’ = y
Persamaan matriknya: P’ = My o P
3 x 1 3 x 3 3 x 1
- x My11 My12 My13 x
- x My11 My12 My13 x
y = My21 My22 My23 o y
1 My31 My32 My33 1
-x My11. x + My12. y + My13. 1
y = My21. x + My22. y + My23. 1
procedure MatrikPencerminanSumbuY (var My : matrik33);
procedure Form1.btCerminYObyekClick(Sender: Tobject);
begin
Obyek2D (Obyek);
MatrikPencerminanSumbuY (My);
MatrikKaliTransforObyek2D (Obyek , My); GambarObyek2D;
end;
Dari persamaan antar sel diperoleh:
My11 = -1 My12 = 0 My13 = 0
procedure MatrikPencerminanSumbuY (var My : matrik33);
begin
My[1,1] := - 1 ; My[1,2] := 0 ; My[1,3] := 0 ; My[2,1] := 0 ; My[2,2] := 1 ; My[2,3] := 0 ; My[3,1] := 0 ; My[3,2] := 0 ; My[3,3] := 1 ; end;
procedure Form1.btCerminYObyekClick(Sender: Tobject);
begin
Obyek2D (Obyek);
MatrikPencerminanSumbuY (My);
MatrikKaliTransforObyek2D (Obyek , My); GambarObyek2D;
Shearing / Deformasi :
Sh, a, b
- mengubah bentuk bangun- faktor perubah pada sumbu x - faktor perubah pada sumbu y
1 a 0
Sh,a,b = b 1 0
0 0 1
procedure MatrikShearing (var Sh : matrik33; a, b : real);
begin
Sh[1,1] := 1 ; Sh[1,2] := a ; Sh[1,3] := 0 ; Sh[2,1] := b ; Sh[2,2] := 1; Sh[2,3] := 0 ; Sh[3,1] := 0 ; Sh[3,2] := 0 ; Sh[3,3] := 1 ; end;
procedure TForm1.btSharingObyekClick(Sender: Tobject); Begin
a := StrToFloat(eNilaiA.Text);b := StrToFloat(eNilaiB.Text); Obyek2D (Obyek);
MatrikShearing (Sh, a, b);
MatrikKaliTransforObyek2D (Obyek , Sh); GambarObyek2D;
procedure MatrikShearing (var Sh : matrik33; a, b : real);
begin
Sh[1,1] := 1 ; Sh[1,2] := a ; Sh[1,3] := 0 ; Sh[2,1] := b ; Sh[2,2] := 1; Sh[2,3] := 0 ; Sh[3,1] := 0 ; Sh[3,2] := 0 ; Sh[3,3] := 1 ; end;
procedure TForm1.btSharingObyekClick(Sender: Tobject); Begin
a := StrToFloat(eNilaiA.Text);b := StrToFloat(eNilaiB.Text); Obyek2D (Obyek);
MatrikShearing (Sh, a, b);
MatrikKaliTransforObyek2D (Obyek , Sh);
GambarObyek2D;4/19/2013 27
Transformasi Obyek Kontinyu (Ellips atau Lingkaran)
Semua titik harus ditransformasikan.Misal sebuah lingkaran dengan pusat (a,b) dan radius r akan diputar dengan sudut α terhadap titik (0,0).
Dipilih lingkaran dalam koordinat trigonometri dengan:
x = x0 + r. cos α + a
y = y0 – r. sin α + b Perkalian matriknya:P’ = Ro,α o P
Transformasi Obyek Kontinyu (Ellips atau Lingkaran)
Semua titik harus ditransformasikan.Misal sebuah lingkaran dengan pusat (a,b) dan radius r akan diputar dengan sudut α terhadap titik (0,0).
Dipilih lingkaran dalam koordinat trigonometri dengan:
x = x0 + r. cos α + a y = y0 – r. sin α + b
cos α - sin α 0 x0 + r. cos α + a
P’ = sin α cos α 0 o y0 - r. sin α + b
0 0 1 1
4/19/2013 Komputer grafik widjianto 28
Perkalian matriknya: P’ = Ro,α o P
Hasil perkalian matrik adalah:
Procedurenya sebagai berikut.
procedure RotasiLingkaran; var
Sudut, Rad, Xhasil, YHasil : real; begin
Sudut := 0;
While sudut <= 360 do begin
Rad := sudut/180 *3.14;
Xhasil : = cos(Rad)*(x0 +r * cos(Rad)+a) - sin(Rad)* (y0 - r* sin(Rad) + b);
Yhasil : = sin(Rad)*(x0 +r * cos(Rad)+a) + cos(Rad)* (y0 - r* sin(Rad) + b);
Canvas.Pixels[trunc(Xhasil), trunc(Yhasil)] := clColor; Sudut := Sudut + 0.05;
end;
Procedurenya sebagai berikut.
procedure RotasiLingkaran; var
Sudut, Rad, Xhasil, YHasil : real; begin
Sudut := 0;
While sudut <= 360 do begin
Rad := sudut/180 *3.14;
Xhasil : = cos(Rad)*(x0 +r * cos(Rad)+a) - sin(Rad)* (y0 - r* sin(Rad) + b);
Yhasil : = sin(Rad)*(x0 +r * cos(Rad)+a) + cos(Rad)* (y0 - r* sin(Rad) + b);
Canvas.Pixels[trunc(Xhasil), trunc(Yhasil)] := clColor; Sudut := Sudut + 0.05;
3.5 Transformasi Lanjut
Trnasformasi lanjut umumnya
- Tidak mengacu pada titik (0,0), sumbu x atau sumbu y.
- Dapat berbentuk komposisi fungsi transformasi dasar.
- Bentuk transformasi lanjut biasanya rumit.
Transformasi lanjut terdiri dari:
- rotasi terhadap titik (a,b),
- scaling terhadap titik (a,b),
- pencerminan terhadap garis x = a, y = a atau y = mx + b.
3.5 Transformasi Lanjut
Trnasformasi lanjut umumnya
- Tidak mengacu pada titik (0,0), sumbu x atau sumbu y.
- Dapat berbentuk komposisi fungsi transformasi dasar.
- Bentuk transformasi lanjut biasanya rumit.
Transformasi lanjut terdiri dari:
- rotasi terhadap titik (a,b),
- scaling terhadap titik (a,b),
(0,0) Y
A(a,b)
X P(x,y)
P’(x’,y’)
r
r
α
3.5.1 Rotasi Terhadap Titik A(a,b) : Ra, α
Penurunan secara geometri sukar dilakukan.
Dipermudah dengan transformasi komposisi dari transformasi dasar.
Langkah-langkahnya sebagai berikut.
- Translasikan titik A(a,b) ke titik (0,0) Tv dengan v = -ai -bj
- Rotasikan obyek terhadap titik (0,0) Ro, α
- Translasi balik dari titik (0,0) ke titik A(a,b) T-v Langkah-langkahnya sebagai berikut.
- Translasikan titik A(a,b) ke titik (0,0) Tv dengan v = -ai -bj
- Rotasikan obyek terhadap titik (0,0) Ro, α
- Translasi balik dari titik (0,0) ke titik A(a,b) T-v
Bentuk komposisi transformasinya: Ra, α = T-v o Ro, α o Tv
cos α -sin α -a . cos α + b. sin α + a
Ra, α = sin α cos α -a . sin α - b. cos α + b
1 0 a cos α - sin α 0 1 0 -a
Ra, α = 0 1 b o sin α cos α 0 o 0 1 -b
0 0 1 0 0 1 0 0 1
Ra, α = sin α cos α -a . sin α - b. cos α + b
0 0 1
Terlebih dahulu dibuat procedure tak standar pendukung yaitu:
Procedure MatrikObyek2D (var Obyek : matrik3N);
Procedure MatrikTranslasi2D (var Tv: matrik33; a,b : real); Procedure MatrikRotasi2D (var R: matrik33; sudut : real);
Procedure MatrikKaliTransformasi2D (var Tr1: matrik33; Tr2 : matrik33);
Procedure MatrikKaliTransformasiObyek2D (var Obyek : matrik3N; Tr : matrik33); Procedure GambarObyek(Obyek);
Procedure Rotasi Obyek terhadap titik A(a,b) dapat ditulis:
Procedure Form1.btRotasiObyekAClick(Sender: Tobject);
Begin
Sudut := StrToFloat(edSudut.Text);
a:= strToFloat(eA.Text); b := StrToFloat(eB.Text); MatrikObyek2D(Obyek);
MatrikTranslasi2D(Tv1, -a, -b); MatrikTranslasi2D(Tv, a, b); MatrikRotasi2D(R, sudut);
Procedure Rotasi Obyek terhadap titik A(a,b) dapat ditulis:
Procedure Form1.btRotasiObyekAClick(Sender: Tobject);
Begin
Sudut := StrToFloat(edSudut.Text);
a:= strToFloat(eA.Text); b := StrToFloat(eB.Text); MatrikObyek2D(Obyek);
MatrikTranslasi2D(Tv1, -a, -b); MatrikTranslasi2D(Tv, a, b); MatrikRotasi2D(R, sudut);
MatrikKaliTransformasi2D(Tv, R); MatrikKaliTransformasi2D(Tv, Tv1);
MatrikKaliTransformasiObyek2D(Obyek, Tv); GambarObyek2D;
3.5.2 Scaling Terhadap Titik A(a,b) : SA,sx,sy
Langkah-langkahnya sebagai berikut.
- Translasikan titik A(a,b) ke titik (0,0) Tv v = -ai - bj - Scaling obyek terhadap titik (0,0) So,sx,sy
- Translasi balik dari titik (0,0) ke titik A(a,b) T-v
Bentuk komposisi transformasinya:
SA,sx,sy = T-v o So,sx,sy o Tv
Penurunan rumus secara geometri sukar dilakukan.
Dapat dipermudah dengan memandang transformasi sebagai komposisi dari beberapa transformasi dasar.
Langkah-langkahnya sebagai berikut.
- Translasikan titik A(a,b) ke titik (0,0) Tv v = -ai - bj - Scaling obyek terhadap titik (0,0) So,sx,sy
- Translasi balik dari titik (0,0) ke titik A(a,b) T-v
Bentuk komposisi transformasinya:
Untuk membuat procedure transformasi ini terlebih dahulu dibuat procedure tak standar pendukung yaitu:
Procedure MatrikObyek2D (var Obyek : matrik3N);
Procedure MatrikTranslasi2D (var Tv: matrik33; a,b : integer); Procedure .MatrikScaling2D (var S: matrik33; sx, sy : real);
Procedure MatrikKaliTransformasi2D(var Tr1: matrik33; Tr2 : matrik33);
Procedure MatrikKaliTransformasiObyek2D (var Obyek : matrik3N; Tr : matrik33);
Sehingga procedure Scaling Obyek terhadap titik A(a,b) dapat ditulis:
Procedure Form1.btScalingAObyek(Sender: Tobject); Begin
Sx := StrToFloat(edit1.Text); Sy := StrToFloat(edit2.Text); MatrikObyek2D (Obyek);
MatrikTranslasi2D(Tv1, -a, -b); MatrikTranslasi2D (Tv, a, b); MatrikScaling2D (S, sx, sy);
MatrikKaliTransformasi2D(S, Tv); MatrikKaliTransformasi2D(S; Tv1);
MatrikKaliTransformasiObyek2D (Obyek, S); GambarObyek2D;
End;
Sehingga procedure Scaling Obyek terhadap titik A(a,b) dapat ditulis:
Procedure Form1.btScalingAObyek(Sender: Tobject); Begin
Sx := StrToFloat(edit1.Text); Sy := StrToFloat(edit2.Text); MatrikObyek2D (Obyek);
MatrikTranslasi2D(Tv1, -a, -b); MatrikTranslasi2D (Tv, a, b); MatrikScaling2D (S, sx, sy);
MatrikKaliTransformasi2D(S, Tv); MatrikKaliTransformasi2D(S; Tv1);
MatrikKaliTransformasiObyek2D (Obyek, S); GambarObyek2D;
3.5.3 Pencerminan Terhadap Garis y = mx + b Mymxb
Dari gambar disamping m = slope garis y = mx + b,
Penurunan rumus secara geometri sukar dilakukan. Dapat dipermudah dengan memandang transformasi sebagai komposisi dari beberapa transformasi dasar.
sin α = m/( √(m2 +1))
cos α = 1/( √(m2 +1))
Penurunan rumus secara geometri sukar dilakukan. Dapat dipermudah dengan memandang transformasi sebagai komposisi dari beberapa transformasi dasar.
- Translasikan titik (0,b) ke titik (0,0) Tv dengan v = 0i -bj
- Rotasikan obyek terhadap titik (0,0) dengan sudut putar - α Ro, -α - Pencerminan terhadap sumbu x Mx
- Rotasikan balik obyek terhadap titik (0,0) dengan sudut putar α Ro, α - Translasi balik dari titik (0,0) ke titik (0,b) T-v dengan v = 0i +bj
Untuk membuat procedure transformasi ini harus dibuat dulu procedure pendukung:
Procedure MatrikObyek2D (var Obyek : matrik3N);
Procedure MatrikTranslasi2D ( var Tv: matrik33; a,b : integer); Procedure MatrikRotasi2D (var R: matrik33; sudut : real);
Procedure MatrikPencerminanX (var Mx: matrik33);
Procedure MatrikKaliTransformasi2D(var Tr1: matrik33; Tr2 : matrik33);
Procedure MatrikKaliTransformasiObyek2D (var Obyek : matrik3N; Tr : matrik33); Sehingga procedure Pencerminan Obyek
terhadap garis y = mx + b dapat ditulis:
Procedure Form1.btPencerminanObyek(Sender: Tobject); Begin
m := StrToFloat(edM.Text); b := StrtoFloat(edB.Text); sudut := arctan(m);
Canvas. MoveTo(x0,trunc(y0 - b));
Canvas.LineTo(x0 + 200,trunc(y0 - 200* m - b)); MatrikObyek2D (Obyek);
MatrikTranslasi2D (Tv1, -a, -b); MatrikTranslasi2D (Tv, a, b); MatrikRotasi2D (R, sudut); MatrikRotasi2D (R1, -sudut);
Sehingga procedure Pencerminan Obyek terhadap garis y = mx + b dapat ditulis:
Procedure Form1.btPencerminanObyek(Sender: Tobject); Begin
m := StrToFloat(edM.Text); b := StrtoFloat(edB.Text); sudut := arctan(m);
Canvas. MoveTo(x0,trunc(y0 - b));
Canvas.LineTo(x0 + 200,trunc(y0 - 200* m - b)); MatrikObyek2D (Obyek);
MatrikTranslasi2D (Tv1, -a, -b); MatrikTranslasi2D (Tv, a, b); MatrikRotasi2D (R, sudut); MatrikRotasi2D (R1, -sudut);
MatrikCerminX(Mx);
MatrikKaliTransformasi2D (Tv, R); MatrikKaliTransformasi2D (Tv, Mx); MatrikKaliTransformasi2D (Tv, R1); MatrikKaliTransformasi2D (Tv, Tv1); MatrikKaliTransformasiObyek2D
(Obyek, Tv); GambarObyek2D;
End;