GRAPHICS AND VISUALIZATION
MAKALAH
Logo
Oleh :
Ade Johar Maturidi
NIM. P31.2007.00352
UNIVERSITAS MUHAMMADIYAH CIREBON TAHUN 2007
1
KATA PENGANTAR
Assalamu’alaikum wr. wb. Alhamdulillah, puji syukur kita panjatkan kehadirat Allah SWT yang dengan rahmat dan hidayahNya kita dapat berada dalam nikmat Iman dan Islam, dan dengan izinNya pula makalah ini telah selesai disusun untuk kemudian menjadi bermanfaat bagi kita semua. Makalah ini ada beberapa bagian yang menjadi pokok bahasan antara lain: 1. Mengenal perbedaan menggambar pada Image dan pada Paintbox dalam Pemrograman DELPHI 2. Membuat Vektor Grafik 2 Dimensi dengan Pemrograman DELPHI 3. Membuat Vektor Grafik 3 Dimensi dengan Pemrograman DELPHI Semoga apa yang telah terselesaikan dalam makalah ini dapat bermanfaat bagi kita semua. Tak lupa pula saya mengucapkan permohonan maaf apabila dalam tulisan maupun arti masih terdapat kesahalan. Saya sampaikan pula rasa terima kasih kepada semua pihak yang telah membantu dalam proses penyelesaian makalah ini dan semoga dukungan baik moril maupun materil mendapatkan balasan dari Allah SWT. Akhirnya, kita berharap Allah SWT tetap memberi petunjuk dan bimbingan kepada kita semua dan senantiasa menyertai gerak langkah kita. Amien. Wassalamu’alaikum Wr. Wb.
Ade Johar Maturidi
2
PRAKTIKUM 1
”Mengenal perbedaan menggambar pada Image dan pada Paintbox dalam Pemrograman DELPHI”
1. Deklarasi Pertama (awal) Pada deklarasi awal dibuat tombol-tombol untuk Image dan Paintbox seperti gambar di bawah ini :
Kemudian gambar di bawah ini merupakan kode-kode program pada Delphi.
Kode-Kode Program pada Delphi : unit coba; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons; type TForm1 = class(TForm) Image1: TImage; PaintBox1: TPaintBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Edit2: TEdit; BitBtn1: TBitBtn; BitBtn2: TBitBtn; BitBtn3: TBitBtn;
3
BitBtn4: TBitBtn; BitBtn5: TBitBtn; BitBtn6: TBitBtn; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure BitBtn3Click(Sender: TObject); procedure BitBtn4Click(Sender: TObject); procedure BitBtn5Click(Sender: TObject); procedure BitBtn6Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
Implementation {$R *.dfm}
4
2. Tombol untuk menyimpan gambar ke komputer procedure TForm1.BitBtn5Click(Sender: TObject); begin Image1.Picture.SaveToFile('d:\test.bmp'); end;
3. Tombol untuk meng-load gambar dari komputer procedure TForm1.BitBtn5Click(Sender: TObject); begin Image1.Picture.SaveToFile('d:\test.bmp'); end;
4. Tombol untuk memulai pengetesan antara Image dan Paintbox procedure TForm1.BitBtn2Click(Sender: TObject); var t1,t2: LongInt; i
: Integer;
begin image1.Canvas.pen.width := 2; t1:=getTickCount; for i := 1 to 9000 do image1.canvas.lineto(random(300),random(300)); t2 := getTickCount; label1.caption := intTostr(t2-t1) +'ms'; paintbox1.canvas.pen.width := 2; t1:=getTickCount; for i := 1 to 9000 do paintbox1.canvas.lineto(random(300),random(300)); t2 := getTickCount; label2.caption := IntToStr(t2-t1) +'ms'; end;
5
5. Tombol untuk menghentikan pengetesan procedure TForm1.BitBtn3Click(Sender: TObject); begin close; end;
6. Tombol untuk menghapus Image dan menggantinya dengan warna biru procedure TForm1.BitBtn1Click(Sender: TObject); var rect: TRect; begin rect:= Bounds(0,0,image1.width,image1.height); image1.Canvas.Brush.Color := clblue; image1.canvas.FillRect(rect);
6
end;
7. Tombol untuk menghapus Paintbox dan menggantinya dengan warna merah procedure TForm1.BitBtn6Click(Sender: TObject); var rect: TRect; begin rect:= Bounds(0,0,image1.width,image1.height); PaintBox1.Canvas.Brush.Color := clRED; PaintBox1.canvas.FillRect(rect); end;
7
8. Fungsi untuk membuat garis lurus di Image dan mengukur posisi mouse procedure Tform1.Image1MouseDown(Sender: Tobject; Button: TmouseButton; Shift: TshiftState; X, Y: Integer); begin if shift = [ssright] then begin image1.Canvas.TextOut(x,y,IntToStr(x) + ‘:’ + IntToStr(y)); end; end; procedure Tform1.Image1MouseMove(Sender: Tobject; Shift: TshiftState; X, Y: Integer); begin if shift = [ssleft] then image1.Canvas.LineTo(x,y); end;
9. Fungsi untuk membuat garis lurus di Paintbox dan mengukur posisi mouse procedure Tform1.PaintBox1MouseDown(Sender: Tobject; Button: TmouseButton; Shift: TshiftState; X, Y: Integer); begin if shift = [ssright] then begin PaintBox1.Canvas.TextOut(x,y,IntToStr(x) + ‘:’ + IntToStr(y)) end; end; procedure Tform1.PaintBox1MouseMove(Sender: Tobject; Shift: TshiftState; X, Y: Integer); begin if shift = [ssleft] then PaintBox1.Canvas.LineTo(x,y); end;
8
10. Tampilan Program a. Perbandingan antara Image dan Paintbox b. Hasil Perbandingan Percobaan ke
Image
Paintbox
1. 2. 3. 4. 5.
c. Hasil Perbandingan Setelah gambar di simpan di komputer dan dipanggil kembali adalah Percobaan ke
Image
Paintbox
1. 2. 3. 4. 5. d. Gambar di Image maupun di PaintBox dihapus, lantas dengan menggunakan mouse kita dapat membuat garis dan mengetahui posisi (x,y)
11. Analisa dan Kesimpulan a. ... b. ... c. ...
9
PRAKTIKUM 2 “ Membuat Vektor Grafik 2 Dimensi dengan Pemrograman DELPHI“
1. Deklarasi Pertama (awal) unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; Panel1: TPanel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations }
10
end; var Form1: TForm1; alf,
{ Sudutputar }
si,co,
{ Sinus dan Kosinus }
mf,
{ factor Skala }
x0,y0: single;
{ Basis koordinat absolut }
sf
: integer;
dirFlg : boolean;
{ factor Cerminan } { flag arah }
var x1,y1,x2,y2 :Integer; mausTaste :Boolean; implementation {$R *.dfm}
2. Deklarasi Prosedur untuk desain bentuk rumah procedure dwc (dx1,dy1,R : single); { gambar lingkaran relatif } var x1,y1 : single; begin dx1 := mf * dx1; dy1 := mf * dy1; R := mf * R; x1 := x0 + dx1 * co - sf * dy1 * si; y1 := y0 - sf * dy1 * co - dx1 * si; form1.canvas.ellipse(round(x1-r),round(y1-r),round(x1+r),round(y1+r)); End;
procedure dwl (dx1,dy1 : single);
{ gambar garis relatif }
var x1,y1 : single; begin dx1 := mf * dx1; dy1 := mf * dy1; x1 := x0 + dx1 * co - sf * dy1 * si; y1 := y0 - sf * dy1 * co - dx1 * si; form1.canvas.Lineto(round(x1),round(y1)); End;
procedure dwp (dx1,dy1:single);
{ gambar titik relatif }
var x1,y1 : single; begin dx1 := mf * dx1; dy1 := mf * dy1; x1 := x0 + dx1 * co - sf * dy1 * si; y1 := y0 - sf * dy1 * co - dx1 * si; form1.canvas.moveto(round(x1),round(y1)); End;
11
procedure drawHouse;
{ gambar rumah }
begin dwp(0, 10);
{ sisi depan }
dwl(10, 10); dwl(10, 0); dwl(0, 0); dwl(0, 10); dwp(1, 8);
{ jendela }
dwl(4, 8); dwl(4, 4); dwl(1, 4); dwl(1, 8);
dwp(6, 0);
{ Pintu }
dwl(6, 8); dwl(9, 8); dwl(9, 0); dwl(6, 0); dwp(-1, 9);
{ Atap }
dwl(5, 15); dwl(11, 9); dwc(5, 12, 1);
{ fentilasi }
dwp(7, 13);
{ pondasi Antena }
dwl(7, 16); dwl(9, 16); dwl(9, 11); End;
3. Prosedur untuk mengatur tampilan gambar procedure TForm1.FormCreate(Sender: TObject); begin x0 := clientWidth / 2; y0 := clientHeight / 2; alf := 0; sf := 1; mf := 20; canvas.brush.style:= bsclear; end;
procedure TForm1.Button1Click(Sender: TObject); begin mf := mf + 1;
{ Perbesar Gambar }
end;
procedure TForm1.Button2Click(Sender: TObject); begin mf := mf - 1;
{ Perkecil Gambar }
end;
procedure TForm1.Button4Click(Sender: TObject); begin sf := -sf;
{ Cerminan Gambar }
end;
procedure TForm1.Button3Click(Sender: TObject); begin
12
dirFlg := Not dirFlg;
{ arah putaran }
end;
procedure TForm1.Timer1Timer(Sender: TObject); begin form1.refresh; If dirFlg Then alf := alf + Pi / 100
{ putaran sesuai dengan arah jarum jam }
Else alf := alf - Pi / 100;
{ putaran melawan arah jarum jam }
si := Sin(alf); co := Cos(alf); drawHouse; end;
4.
Source Code pengembangan procedure TForm1.FormCreate(Sender: TObject); begin mausTaste := False; Canvas.Pen.Mode := pmNotXor; Canvas.Pen.Style := psdash; end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; x, y: Integer); begin Canvas.Brush.Style:=bsClear; x1 := x; y1 := y; x2 := x; y2 := y; Canvas.Rectangle (x1, y1,x2, y2); mausTaste := True end;
5. Prosedur untuk mengulang tampilan output grafik procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Panel1.Caption := IntToStr(x)+ ':' + IntToStr(y); if not mausTaste then exit; Canvas.Rectangle (x1, y1,x2, y2); x2 := x; y2 := y; Canvas.Rectangle (x1, y1,x2, y2) end;
13
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin mausTaste := False end;
6. Tampilan Program
Sesudah program dijalankan gambar berputar melawan arah jarum jam (dengan lebar langkah sebesar 1/8 derajat). Dengan bantuan tombol-tombol gambar dapat dimanipulasi secara Online. Sebagai dasar pengembangan adalah dengan 2 kali pemakaian XOR dengan 2 Nilai (dalam hal ini adalah Warna) akan kembali ke bentuk awal. Mode XOR-dapat dicapai dengan melalui Mode-Property dariObjek Pen. Cara ini juga dapat untuk membentuk Windows.
7. Analisa dan Kesimpulan
14
A. PRAKTIKUM 3
”Membuat Vektor Grafik 3 Dimensi dengan Pemrograman DELPHI“ 1. Deklarasi Pertama (awal)
Kode-kode Program Delphi : unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls;
type TForm1 = class(TForm) Button3: TButton; BitBtn1: TBitBtn; BitBtn2: TBitBtn; BitBtn3: TBitBtn; BitBtn4: TBitBtn; BitBtn5: TBitBtn; BitBtn6: TBitBtn; BitBtn7: TBitBtn; BitBtn8: TBitBtn; BitBtn9: TBitBtn; BitBtn10: TBitBtn; BitBtn11: TBitBtn;
15
BitBtn12: TBitBtn; BitBtn13: TBitBtn; BitBtn14: TBitBtn; procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject); procedure BitBtn1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtn1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtn2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtn3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtn4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtn5MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtn6MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtn7MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtn8MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtn9MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtn10MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtn11MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtn12MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtn13Click(Sender: TObject); procedure BitBtn14Click(Sender: TObject); procedure FormDestroy(Sender: TObject);
private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
16
implementation
uses unit2,unit3;
{$R *.dfm}
var form2 : TForm2; ok
: boolean;
perintah : integer;
procedure TForm1.FormCreate(Sender: TObject); begin form2 := tform2.Create(Self); form2.Show; left := screen.width-width; top := screen.height-height;
end;
procedure TForm1.Button3Click(Sender: TObject); begin ok := false; close
end;
procedure TForm1.BitBtn1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin perintah :=1; end;
procedure TForm1.BitBtn1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin perintah :=0; end;
procedure TForm1.BitBtn2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin perintah := 2; end;
procedure TForm1.BitBtn3MouseDown(Sender: TObject; Button: TMouseButton;
17
Shift: TShiftState; X, Y: Integer); begin perintah :=3; end;
procedure TForm1.BitBtn4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin perintah :=4; end;
procedure TForm1.BitBtn5MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin perintah :=5; end;
procedure TForm1.BitBtn6MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin perintah := 6; end;
procedure TForm1.BitBtn7MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin perintah :=7; end;
procedure TForm1.BitBtn8MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin perintah := 8; end;
procedure TForm1.BitBtn9MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin perintah:=9; end;
procedure TForm1.BitBtn10MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin perintah:=10;
18
end;
procedure TForm1.BitBtn11MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin perintah:=11; end;
procedure TForm1.BitBtn12MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin perintah:=12; end;
procedure TForm1.BitBtn13Click(Sender: TObject); var lop:integer; begin ok := true; init(form2); gambar(figur1); while ok do begin case perintah of 1 : scaling(figur1,1.04); 2 : scaling(figur1,0.96); 3 : rotasi(figur1,0,1,0); 4 : rotasi(figur1,0,-1,0); 5 : rotasi(figur1,1,0,0); 6 : rotasi(figur1,-1,0,0); 7 : rotasi(figur1,0,0,1); 8 : rotasi(figur1,0,0,-1); 9 : translasi(figur1,0,1,0); 10 : translasi(figur1,-2,0,0); 11 : translasi(figur1,2,0,0); 12 : translasi(figur1,0,-2,0); end; if perintah <> 0 then gambar(figur1); //for ax := 1 to 1000000 do begin application.processMessages; //a :=Sin(ax) + a; for lop:=1 to 100000000 do; //end; end;
end;
19
procedure TForm1.BitBtn14Click(Sender: TObject); begin ok := false; close;
end;
procedure TForm1.FormDestroy(Sender: TObject); begin form2.Free; end;
end.
2. Tampilan Program
3. Analisa dan Kesimpulan
20