Tutorial Komputer Grafik
LATIHAN 3.2
MENGGAMBAR ROTASI 2D (TRANSFORMASI DASAR) •
Pada borland delphi buatlah tampilan form seperti berikut :
•
Untuk menambahkan komponen StringGrid bisa di akses pada tab control Additional pada component pallete, kemudian aturlah beberapa properties sebagai berikut: o FixedCol = 1, FixedRow = 0, o RowCount = 2, ColCount = 4 dan option goEditing = True.
•
Selanjutnya tekan F12 untuk berpindah ke jendela code editor dan buatlah deklarasi konstanta dan matrik pada bagian uses dan type program, sebagai berikut: //deklarasi konstanta Const N = 3; Type // deklarasi matrik Matrik33 = array[1..3,1..3] of Real; Matrik3N = array[1..3,1..N] of Real;
Oleh : Moh. Furqan, S. Kom. STT Nurul Jadid Paiton Probolinggo
Tutorial Komputer Grafik
•
Untuk kelengkapan program buatlah prosedur pendukung yaitu prosedur FormCreate / klik dua kali Form yang kosong, ketikkan kode di antara Begin dan End, berikut: // lebar layar dan tinggi layar maksimum x0 := ClientWidth div 2; y0 := ClientHeight div 2; Dalam hal ini x0 dan y0 berupa variabel global
•
Dan prosedur sumbu / Event OnPaint pada Form, ketikkan kode di antara Begin dan End, berikut: for k := 0 to ClientWidth do
// sumbu x
Canvas.Pixels[k,y0]:= clBlue; for k := 0 to ClientHeight do // sumbu y Canvas.Pixels[x0,k]:= clRed; Perintah di atas akan menampilkan sumbu koordinat x yang berwarna biru dan sumbu koordinat y yang berwarna biru secara otomatis saat form dijalankan. Sebaiknya k berupa variable lokal. •
Kemudian prosedur FormShow pada Form, ketikkan kode di antara Begin dan End, berikut: procedure TForm1.FormShow(Sender: TObject); begin with StringGrid1 do begin Cells[0,0]:='X'; Cells[0,1]:='Y'; end; end; Perintah di atas akan menampilkan tulisan x dan y pada StringGrid di sel (0,0) dan (0,1)
•
Buatlah prosedur tak standar untuk obyek2D, ketikkan kode di antara Begin dan End, sebagai berikut :
Oleh : Moh. Furqan, S. Kom. STT Nurul Jadid Paiton Probolinggo
Tutorial Komputer Grafik
procedure TForm1.Obyek2D(Sender: TObject; var Obyek:Matrik3N); var i,j : Integer; begin for i := 1 to 2 do for j := 1 to N do Obyek[i,j]:=StrToFloat(StringGrid1.Cells[j,i-1]); for j := 1 to N do Obyek[3,j]:=1; end;
Serta daftarkan prosedur tersebut pada bagian type dengan nama yang sama tetapi menghilangkan kata TForm1. Variabel Obyek didaftarkan sebagai variable global dan bertipe matrik3N. •
Lakukan hal yang sama seperti prosedur obyek2D, untuk membuat prosedur tak standar Matrik Rotasi sebagai berikut: procedure TForm1.MatrikRotasi2D(Sender: TObject; var R : Matrik33; sudut : real); var Radian : Real; begin sudut := StrToFloat(eSudut.Text); Radian := sudut / 180 * 3.14; R[1,1]:=cos(Radian);
R[1,2]:=sin(Radian); R[1,3]:=0;
R[2,1]:=sin(Radian);
R[2,2]:=cos(Radian); R[2,3]:=0;
R[3,1]:=0;
R[3,2]:=0;
R[3,3]:=1;
end; Variabel R, sudut didaftarkan sebagai variable global dan bertipe matrik33dan real. •
Buatlah prosedur tak standar untuk perkalian matrik dengan obyek, ketikkan kode di antara Begin dan End, sebagai berikut :
Oleh : Moh. Furqan, S. Kom. STT Nurul Jadid Paiton Probolinggo
Tutorial Komputer Grafik
procedure MatrikKaliTransformasiObyek2D(var Obyek: Matrik3N; R: Matrik33); var i,j,k : Integer; Hasil : Matrik3N; begin for i := 1 to 3 do for k := 1 to N do begin Hasil[i,k]:=0; for j := 1 to 3 do Hasil[i,k]:= Hasil[i,k] + R[i,j] * Obyek[j,k]; end; Obyek := Hasil; end; Dalam hal ini prosedur tidak perlu di daftarkan pada bagian type karena tidak memanggil nilai, sedangkan untuk R sebagai variabel global. •
Buatlah prosedur standar untuk segitiga, ketikkan kode di antara Begin dan End, sebagai berikut : procedure TForm1.btSegitigaClick(Sender: TObject); begin Obyek2D(Sender,Obyek); Canvas.MoveTo(trunc(X0 + Obyek[1,1]),trunc(Y0 - Obyek[2,1])); Canvas.LineTo(trunc(X0 + Obyek[1,2]),trunc(Y0 - Obyek[2,2])); Canvas.MoveTo(trunc(X0 + Obyek[1,2]),trunc(Y0 - Obyek[2,2])); Canvas.LineTo(trunc(X0 + Obyek[1,3]),trunc(Y0 - Obyek[2,3])); Canvas.MoveTo(trunc(X0 + Obyek[1,3]),trunc(Y0 - Obyek[2,3])); Canvas.LineTo(trunc(X0 + Obyek[1,1]),trunc(Y0 - Obyek[2,1])); end; Dalam hal ini btSegitiga adalah sebuah komponen edit, serta prosedur memanggil obyek2D dan membuat 3 buah garis dengan menggunakan perintah standar.
Oleh : Moh. Furqan, S. Kom. STT Nurul Jadid Paiton Probolinggo
Tutorial Komputer Grafik
•
Selanjutnya buatlah prosedur standar untuk tombol Rotasi, ketikkan kode di antara Begin dan End, sebagai berikut : procedure TForm1.btRotasiClick(Sender: TObject); begin Obyek2D(Sender,Obyek); MatrikRotasi2D(Sender,R,sudut); MatrikKaliTransformasiObyek2D(Obyek,R); Canvas.MoveTo(trunc(X0 + Obyek[1,1]),trunc(Y0 - Obyek[2,1])); Canvas.LineTo(trunc(X0 + Obyek[1,2]),trunc(Y0 - Obyek[2,2])); Canvas.MoveTo(trunc(X0 + Obyek[1,2]),trunc(Y0 - Obyek[2,2])); Canvas.LineTo(trunc(X0 + Obyek[1,3]),trunc(Y0 - Obyek[2,3])); Canvas.MoveTo(trunc(X0 + Obyek[1,3]),trunc(Y0 - Obyek[2,3])); Canvas.LineTo(trunc(X0 + Obyek[1,1]),trunc(Y0 - Obyek[2,1])); end; Dalam hal ini btRotasi adalah sebuah komponen edit, kemudian prosedur akan memanggil obyek2D, matrikRotasi2D, MatrikKaliTransformasiObyek2D dan menggambarkan bangun hasil dengan fungsi library delphi.
•
Pada tombol Ulang dan keluar, ketikkan kode berikut: // ulang procedure TForm1.btUlangClick(Sender: TObject); var i,j : Integer; begin Form1.Refresh;
eSudut.Text :='';
for i := 1 to 2 do for j := 1 to 3 do StringGrid1.Cells[j,i-1]:=''; end; // keluar procedure TForm1.btExitClick(Sender: TObject); begin Application.Terminate; end;
Oleh : Moh. Furqan, S. Kom. STT Nurul Jadid Paiton Probolinggo
Tutorial Komputer Grafik
•
Kemudian jalankan program dengan menekan F9 dan perhatikan hasilnya.
Awal obyek
Obyek setelah di Rotasi
Titik koordinat obyek dan sudut rotasi obyek
Oleh : Moh. Furqan, S. Kom. STT Nurul Jadid Paiton Probolinggo