Tutorial Komputer Grafik
LATIHAN 3.5
MENGGAMBAR SHEARING / DEFORMASI (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 = 5 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 = 4;
{segi empat}
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 Shearing ketikkan kode di antara Begin dan End, Sebagai berikut : procedure TForm1.MatrikShearing(Sender: TObject; var Sh : Matrik33; a,b : real); begin a := StrToFloat(eNilaiA.Text); b := StrToFloat(eNilaiB.Text); 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;
Variabel Sh, a dan b didaftarkan sebagai variable global yang bertipe matrik33 dan 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; Sh : 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] + Sh[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 Sh sebagai variabel global. •
Buatlah prosedur standar untuk segitiga, ketikkan kode di antara Begin dan End, sebagai berikut : procedure TForm1.btSegiEmpatClick(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,4]),trunc(Y0 - Obyek[2,4])); Canvas.MoveTo(trunc(X0 + Obyek[1,4]),trunc(Y0 - Obyek[2,4])); Canvas.LineTo(trunc(X0 + Obyek[1,1]),trunc(Y0 - Obyek[2,1])); end; Dalam hal ini btSegiEmpat adalah sebuah komponen edit, serta prosedur memanggil obyek2D dan membuat 4 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 Shearing, ketikkan kode di antara Begin dan End, sebagai berikut : procedure TForm1.btShearingClick(Sender: TObject); begin Obyek2D(Sender,Obyek); MatrikShearing(Sender,Sh,a,b); MatrikKaliTransformasiObyek2D(Obyek,Sh); 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,4]),trunc(Y0 - Obyek[2,4])); Canvas.MoveTo(trunc(X0 + Obyek[1,4]),trunc(Y0 - Obyek[2,4])); Canvas.LineTo(trunc(X0 + Obyek[1,1]),trunc(Y0 - Obyek[2,1])); end; Dalam hal ini btShearing adalah sebuah komponen edit, kemudian prosedur akan memanggil obyek2D, matrikShearing, 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; eNilaiA.Text :=''; eNilaiB.Text :=''; for i := 1 to 2 do for j := 1 to 4 do StringGrid1.Cells[j,i-1]:=''; end;
Oleh : Moh. Furqan, S. Kom. STT Nurul Jadid Paiton Probolinggo
Tutorial Komputer Grafik
// keluar procedure TForm1.btExitClick(Sender: TObject); begin Application.Terminate; end; •
Kemudian jalankan program dengan menekan F9 dan perhatikan hasilnya.
obyek berubah bentuk
Awal Obyek
Titik koordinat obyek dan nilai faktor perubah (a,b)
Oleh : Moh. Furqan, S. Kom. STT Nurul Jadid Paiton Probolinggo