Tutorial Komputer Grafik
LATIHAN 4.5
MENGGAMBAR ROTASI TERHADAP SUMBU Y •
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 = 2 dan option goEditing = True.
•
Selanjutnya tekan F12 untuk berpindah ke jendela code editor dan buatlah deklarasi dan matrik pada bagian type program, sebagai berikut: // deklarasi matrik Type Matrik44 = array[1..4,1..4] of Real; Matrik4N = array[1..4,1..20] of Real; {N = 20 untuk antisipasi segi banyak}
•
Untuk kelengkapan program buatlah prosedur pendukung yaitu prosedur FormCreate / klik dua kali Form yang kosong, ketikkan kode di antara Begin dan End, berikut:
Oleh : Moh. Furqan, S. Kom. STT Nurul Jadid Paiton Probolinggo
Tutorial Komputer Grafik
Procedure TForm1.FormCreate(Sender: TObject); begin x0 := ClientWidth div 2;
// lebar layar maksimum
y0 := ClientHeight div 2;
// tinggi layar maksimum
with StringGrid1 do begin Cells[0,0]:='X'; Cells[0,1]:='Y'; Cells[0,2]:='Z'; end; Dalam hal ini x0 dan y0 berupa variabel global •
Dan prosedur sumbu / Event OnPaint pada Form, ketikkan kode di antara Begin dan End, berikut: procedure TForm1.FormPaint(Sender: TObject); var k : Integer; begin for k := 1 to X0 do
// sumbu x
begin X3D := X0 + k; Y3D := Y0; Canvas.Pixels[X3D,Y3D]:= clBlue; end; for k := 1 to Y0 do
// sumbu y
begin X3D := X0; Y3D := Y0-k; Canvas.Pixels[X3D,Y3D]:= clRed; end; for k := 1 to X0 do
// sumbu z
begin X3D := X0 - k; Y3D := Y0+k div 2; Canvas.Pixels[X3D,Y3D]:= clGreen; end; end;
Oleh : Moh. Furqan, S. Kom. STT Nurul Jadid Paiton Probolinggo
Tutorial Komputer Grafik
Perintah di atas akan menampilkan sumbu koordinat x yang berwarna biru, sumbu koordinat y yang berwarna biru dan sumbu koordinat z secara otomatis saat form dijalankan. Sebaiknya k berupa variable lokal sedangkan X0, Y0, X3D, Y3D daftar sebagai variable global dengan tipe integer. •
Buatlah prosedur tak standar untuk ubah koordinat Obyek 3D, ketikkan kode sebagai berikut : procedure UbahKoordinatObyek3D(var Obyek2D : Matrik44; Obyek3D : Matrik4N); var i : integer; begin for i := 1 to N do begin Obyek2D[1,i] := X0 + Obyek3D[1,i] - Obyek3D[3,i];
// koordinat 3D
Obyek2D[2,i] := Y0 - Obyek3D[2,i] + Obyek3D[3,i] / 2; // jadi obyek 2D end; end; Dalam hal ini Obyek2D, Obyek3D dan N berupa variabel global yang bertipe Matrik44, Matrik4N dan Integer. •
Buatlah prosedur tak standar untuk Matrik Obyek 3D, ketikkan kode sebagai berikut : procedure TForm1.MatrikObyek3D(Sender: TObject; var Obyek3D : Matrik4N); var i,j : integer; begin N := StrToInt(eSegi.Text); for i := 1 to 3 do for j := 1 to N do Obyek3D[i,j] := StrToInt(StringGrid1.Cells[j,i-1]); for j := 1 to N do
Obyek3D[4,j] :=1;
end;
Oleh : Moh. Furqan, S. Kom. STT Nurul Jadid Paiton Probolinggo
Tutorial Komputer Grafik
Serta daftarkan prosedur tersebut pada bagian type dengan nama yang sama tetapi menghilangkan kata TForm1. •
Kemudian lakukan hal yang sama seperti di atas ketika membuat prosedur tak standar untuk Gambar Obyek 3D, ketikkan kode sebagai berikut : procedure TForm1.GambarObyek3D(Sender : TObject; Obyek3D : Matrik4N); var i : integer; begin UbahKoordinatObyek3D(Obyek2D,Obyek3D); for i := 1 to N-1 do begin Canvas.MoveTo(trunc(Obyek2D[1,i]), trunc(Obyek2D[2,i])); Canvas.LineTo(trunc(Obyek2D[1,i+1]), trunc(Obyek2D[2,i+1])); end; Canvas.MoveTo(trunc(Obyek2D[1,N]), trunc(Obyek2D[2,N])); Canvas.LineTo(trunc(Obyek2D[1,1]), trunc(Obyek2D[2,1])); end;
•
Langkah selanjutnya buatlah prosedur tak standar untuk Matrik Rotasi Sumbu Y, ketikkan kode sebagai berikut : procedure MatrikRotasiSumbuY(var R : Matrik44; sudut: real); Var
radian : real;
Begin radian := sudut / 180 * 3.14; R[1,1] := cos(radian); R[1,2] := 0;
R[1,3] := sin(radian); R[1,4] := 0;
R[2,1] := 0;
R[2,3] := 0 ;
R[2,2] := 1;
R[2,4] := 0;
R[3,1] := -sin(radian) ;R[3,2] := 0 ; R[3,3] := cos(radian); R[3,4] := 0; R[4,1] := 0 ;
R[4,2] := 0 ;
R[4,3] := 0 ;
R[4,4] := 1;
end;
Oleh : Moh. Furqan, S. Kom. STT Nurul Jadid Paiton Probolinggo
Tutorial Komputer Grafik
•
Buatlah prosedur tak standar untuk Matrik Kali Transformasi Obyek 3D, ketikkan kode sebagai berikut : procedure MatrikKaliTransformasiObyek3D(var Obyek : Matrik4N; Tr : Matrik44); var i, j,k : integer;
Hasil : matrik4N;
begin for i := 1 to 4 do for k := 1 to N do begin Hasil [i,k] := 0; for j := 1 to 4 do Hasil[i,k] := Hasil[i,k] + Tr[i,j] * Obyek[j,k]; end; Obyek := Hasil; end; •
Buatlah prosedur standar untuk btObyek, ketikkan kode di antara Begin dan End, sebagai berikut : procedure TForm1.btObyekClick(Sender: TObject); begin MatrikObyek3D(Sender,Obyek3D); GambarObyek3D(Sender,Obyek3D); end; Dalam hal ini btObyek adalah sebuah komponen edit, serta memanggil prosedur Matrik Obyek3D dan Gambar Obyek3D.
•
Untuk membuat segi banyak otomatis pada komponen StringGrid, ketikkan prosedur standar pada komponen eSegi, ketikkan kode di antara Begin dan End, sebagai berikut : procedure TForm1.eSegiChange(Sender: TObject); begin if eSegi.Text='' then begin eSegi.SetFocus;
Oleh : Moh. Furqan, S. Kom. STT Nurul Jadid Paiton Probolinggo
Tutorial Komputer Grafik
StringGrid1.ColCount:=2; StringGrid1.RowCount:=3; end else begin n:=StrToInt(eSegi.Text); StringGrid1.ColCount:=N+1; StringGrid1.RowCount:=3; end; end; •
Kemudian buatlah prosedur standar pada btRotasiY, ketikkan kode di antara Begin dan End, sebagai berikut : procedure TForm1.btRotasiYClick(Sender: TObject); begin sudut:=StrToFloat(eSudut.Text); MatrikObyek3D(Sender,Obyek3D); MatrikRotasiSumbuY(R3,sudut); MatrikKaliTransformasiObyek3D(Obyek3D,R3); Canvas.Pen.Color := clRed; GambarObyek3D(Sender,Obyek3D); end; Dalam hal ini eSudut adalah sebuah komponen edit, serta memanggil prosedur Matrik Obyek3D, Matrik Rotasi Sumbu Y, Matrik Kali Transformasi Obyek3D dan Gambar Obyek3D. Sedangkan R3 dan sudut berupa variabel global yang bertipe Matrik44 dan real
•
Pada tombol Ulang dan keluar, ketikkan kode di antara Begin dan End, sebagai berikut : // ulang procedure TForm1.btUlangClick(Sender: TObject); var i,j : Integer; begin
Oleh : Moh. Furqan, S. Kom. STT Nurul Jadid Paiton Probolinggo
Tutorial Komputer Grafik
Form1.Refresh; eSudut.Text :=''; eSegi.Text:=''; for i := 1 to 3 do for j := 1 to N do StringGrid1.Cells[j,i-1]:=''; end; // keluar procedure TForm1.btExitClick(Sender: TObject); begin Application.Terminate; end; •
Kemudian jalankan program dengan menekan F9 dan perhatikan hasilnya.
Obyek setelah di Rotasi Awal Obyek
Titik koordinat x, y, z dan sudut putar
Oleh : Moh. Furqan, S. Kom. STT Nurul Jadid Paiton Probolinggo