google.com, pub-4169750801100201, DIRECT, f08c47fec0942fa0
APLIKASI GRAFIKA KOMPUTER MENGGUNAKAN LAZARUS | MUDA MUDI CONDROWANGSAN

APLIKASI GRAFIKA KOMPUTER MENGGUNAKAN LAZARUS

APLIKASI GRAFIKA KOMPUTER

MENGGUNAKAN LAZARUS



APLIKASI GRAFIKA KOMPUTER MENGGUNAKAN LAZARUS
 














Tugas Mata Kuliah
GRAFIKA KOMPUTER
KELAS B
Semester Genap TA. 2011/2012



Oleh:

1. Yoga Permana                              123090170              (Ketua)
2. Alhamdia Prananto                       123090193             (Anggota)
3. Cahyo Budi Wicaksono                123090157              (Anggota)
4. Zakaria Annas                              123090182               (Anggota)





JURUSAN TEKNIK INFORMATIKA

FAKULTAS TEKNOLOGI INDUSTRI

UNIVERSITAS PEMBANGUNAN NASIONAL ”VETERAN”

YOGYAKARTA

2012





HALAMAN PENGESAHAN PRESENTASI



APLIKASI GRAFIKA KOMPUTER

MENGGUNAKAN LAZARUS





Disusun oleh:
KELOMPOK  10

Nama
No.Mhs.
Tanda Tangan
Yoga Permana                (Ketua)
123090170

Alhamdia Prananto        (Anggota)
123090193

Cahyo Budi Wicaksono (Anggota)
123090157

Zakaria Annas                (Anggota)
123090182



telah dipresentasikan pada tanggal 27 Juni 2012


Menyetujui
Dosen Pengampu




Herry Sofyan, S.T., M.Kom







BAB I
PENDAHULUAN
1.1.Latar Belakang
Kemajuan teknologi pada saat ini memungkinkan manusia untuk tidak menggambarkan menggunakan media kertas. Dengan adanya kebutuhan manusia yang semakin meningkat dan keinginan untuk mendapatkan sebuah hasil yang lebih bagus dan cepat, maka di buat berbagai program aplikasi untuk dapat memungkinkan manusia menggambarkan memlalui media komputer.
      Namun, tidak hanya program aplikais yang dikhususkan untuk menggambar grafik saja yang dapat menggambar grafik. Akan tetapi bahasa pemrogramanpun dapat melakukan proses menggambar grafik, salah satunya yaitu, Turbo pascal, C , Lazarus dan yang lainnya.

1.2.Rumusan Masalah
Berdasarkan latar belakang masalah yang ada maka dapat dirumuskan masalahnya adalah bagaimana membangun sebuah aplikasi Paint.

1.3.Batasan Masalah
Laporan ini hanya akan membahas antara lain tentang :
a.       Konsep dasar menggambar Transformasi 2 Dimensi grafik di dalam komputer dan mentranslasikan.
b.      Konsep dasar rotasi pada sebuah bidang 2 dimensi.
c.       Konsep dasar menggeser sebuah bangun 2 dimensi.
d.      Konsep dasar scaling sebuah objek 2 dimensi.
e.       Fasilitas yang di gunakan untuk membuat aplikasi Paint menggunakan bahasa pemrograman ialah Lazarus.

1.4.Tujuan Tugas Projek
Tujuan tugas projek ini adalah membangun aplikasi garafika komputer.



1.5. Manfaat Tugas Projek
Manfaat dari aplikasi yang di buat untuk pengguna(user) yaitu mempermudah si pengguna untuk menggambar bangun 2 dimensi atau 3 dimensi, mewarnai sebuah bangun, dll.

1.6  Sistematika Penulisan
              Untuk membantu dan memahami isi serta uraian penelitian, sesuai dengan judul yang dimaksud perlu kiranya menyusun sistematika laporan  kerja praktek sebagai berikut :
BAB I        Pendahuluan
Bab ini menguraikan tentang Latar Belakang Masalah, Perumusan Masalah, Batasan Masalah, Tujuan Tugas Projek, Manfaat Tugas Projek, Sistematika Penulisan.
BAB II       Teori Dasar
Merupakan bagian yang berisikan kajian tentang sistem informasi yang berhubungan dengan masalah yang diteliti.

BAB III     Perancangan Aplikasi
Bab ini berisi tentang perancangan aplikasi yanga akan di buat
BAB IV     Implementasi Program
Bab ini berisi tentang implementasi dari hasil rancangan disertai contoh data yang di input.
BAB V       Kesimpulan dan Saran
Bab ini berisikan kesimpulan dan saran dari  hasil membuat laporan ini.
DAFTAR PUSTAKA









BAB II
TEORI DASAR
2.1 GRAFIKA KOMPUTER
            Grafika Komputer adalah sebuah teknologi visualisasi berbasis komputer yang mampu menghasilkan gambar-gambar dengan persepsi 3D pada layar 2D. Selain itu bisa juga di arti kan sebagai seperangkat alat yang terdiri dari hardware dan software untuk membuat gambar grafik atau citra realistic untuk seni, game komputer, foto dan film animasi. Istilah ”Grafik Komputer”ditemukan tahun 1960 oleh William Fetter : pembentukan disain model cockpit (Boeing) dengan menggunakan pen plotter dan referensi model tubuh manusia 3 Dimensi.
            Grafika Komputer pada dasarnya adalah suatu bidang komputer yang memelajari cara-cara meningkatkan dan memudahkan komunikasi antara manusia dengan mesin (komputer) dengan jalan membangkitkan, menyimpan, dan memanipulasi gambar model suatu obyek mengunakan komputer. Grafika Komputer memungkinkan kita untuk berkomunikasi lewat gambar-gambar, bagan-bagan, dan diagram-diagram.

2.2 SISTEM GRAFIKA
2.2.1    Teknologi Display
Penggunaan alat utama untuk menampilkan output pada sistem grafika adalah video monitor. Pada umumnya menggunakan perancangan cathode-ray-tube (CRT).
Adapun operasinya secara garis besar adalah :
a.       Sebuah electron gun memancarkan electron melalui sistem focusing, dan deflection sistem (sistem untuk mengatur pembelokan) sehingga pancaran elektron mencapai posisi tertentu dari lapisan tertentu pada layer.
b.      Fosfor memancarkan sinar kecil pada setiap posisi yang berhubungan dengan pancaran electron. Sinar yang dipancarkan fosfor cepat hilang, maka diperlukan suatu pengaturan agar fosfor tetap menyala, caranya adalah dengan refreshing yakni menembakkan elektron berulang kali pada posisi yang sama.
c.       Jumlah titik maksimum yang dapat ditampilkan pada monitor tanpa tumpang tindih dinamakan resolusi. Resolusi adalah jumlah titik per centimeter yang dapat ditempatkan menurut arah horizontal dan vertical.
d.      Resolusi CRT tergantung pada tipe fosfor, intensitas yang ditampilkan, focusing gun deflection sistem.
e.        Aspect rasio merupakan property dari video monitor. Misalkan aspect ratio ¾, artinya perbandingan jumlah titik vertikal dan horisontal yang dapat ditampilkan adalah ¾.

2.2.2    Raster-Scan System
a.       Jenis monitor grafika dengan CRT yang paling umum adalah raster-scan display.
b.      Pancaran elektronnya bergerak ke seluruh layer baris per baris dari atas ke bawah
c.       Definisi gambar disimpan dalam memori yang dikenal dengan refresh buffer atau frame buffer.
d.      Setiap titik pada layer merupakan suatu pixel (picture element)
e.       Monitor hitam-putih mempunyai nilai 0 dan 1, tiap pixel 1 bit. Frame buffer disebut bitmap.
f.       Sistem high quality menggunakan 12 bit untuk menyimpan informasi dalam 1 pixel. Menghasilkan resolusi 1024x1024 dan frame buffernya sebesar 3 MB. Frame buffernya disebut pixmap
g.      Refreshing pada raster-scan display mempunyai 60-80 frame per detik.
h.      Kembalinya scan pada bagian kiri layar setelah refreshing tiap scan line dinamakan dengan horizontal trace.
i.        Pada akhir tiap frame (1/80 sampai 1/60 tiap detik ) pancaran electron yang kembali ke atas dinamakan dengan vertical retrace.
j.        Biasanya setiap frame ditampilkan dalam dua tahap menggunakan prosedur interlaced refresh. Tahap pertama, pancaran electron menyalin menurut scan line dari atas ke bawah. Tahap kedua, vertical retrace, pancaran elektoron menyisir sisa scan line.

2.2.3    Random-Scan System
a.       Pancaran diarahkan hanya kebagian layar dimana gambar dibuat
b.      Hanya membuat gambar dengan satu garis pada suatu saat (vector display), stroke writing atau kaligrafik display
c.       Komponen garis dapat digambarkan dan dilakukan refreshing oleh random-scan sistem.
d.      Dirancang untuk membuat seluruh komponen garis dengan rate antara 30 sampai 60 tiap detik.
e.       Hanya dirancang untuk aplikasi line drawing dan tidak dapat menampilkan raster drawing
f.        
2.3 OUTPUT PRIMITIF
            Output/Grafis primitif adalah bentuk geometri dasar yang dapat digunakan untuk membentuk obyek yang lebih komplek. Dengan memasukkan output primitif tersebut sebagai stuktur yang lebih kompleks. Setiap output primitif mempunyai data koordinat dan informasi lain tentang bagaimana cara object ditampilkan pada layar. Titik dan garis lurus adalah bentuk geometri paling sederhana dan komponen gambar.
            Borland C++ Builder menyediakan Canvas yang dapat digunakan untuk menampilkan gambar maupun tulisan ke layar. Kelas Canvas pada umumnya merupakan atribut dari kelas Lain. Beberapa kelas yang mempuntai atribut Canvas antara lain TPaintBox, TShape.

2.3.1    Titik dan Garis
a. Titik(Pixel)
Titik merupakan satuan gambar/grafis yang terkecil. Dengan menggambar titik maka kita dapat menggambar obyek apapun. Termasuk bentuk geometri dibawah merupakan bentuk- bentuk yang pada dasarnya berasal dari titik-titik. Operasi titik ini sering digunakan pada pengolahan citra (Image processing). Setiap titik pada monitor memiliki parameter koordinat dan warna.
Kode untuk menggambar titik :
Canvas-> Pixels[x][y] = warna
Dengan
x : koordinat mendatar
y : koordinat vertikal
Warna  : warna pixel
Contoh : Canvas->Pixel [100][100] = clRed

b. Garis(line)
Garis adalah kumpulan titik-titik/pixel yang tersusun secara lurus dan linier dari titik awal sampai titik akhir.
Kode :
Canvas->MoveTo(x0, y0);
Canvas->MoveTo(x1, y1);
Canvas->LineTo(xn, yn)

2.3.2    Algoritma Pembentukan Garis
Garis merupakan kumpulan dari titik-titik, untuk membentuk garis lurus adalah dengan mengetahui titik awal dan titik akhir. Dengan mengetahui titik awal dan titik akhir maka kita dapat membentuk garis. Untuk menggambarkan proses pembuatan garis dari titik awal ke titik akhir ada berbagai algoritma. Algoritam yang umum adalah DDA dan Bresenham.

a. Berikur ini adalah algoritma DDA :
1. Tentukan 2 buah titik.
2. Tentukan yang menjadi titik awal (X0,Y0) dan titik akhir (X1,Y1).
3. Hitung Dx dan DyDx = X1-X0 dan Dy = Y1 – Y0
4. Bandingkan Abs(Dx) dan Abs(Dy)Jika Abs(Dx) > Abs(Dy) makaSteps = Abs(Dx) bila tidak Steps = Abs(Dy)
5. Hitung penambahan koordinat pixel, yaitu:X_increment = dx/steps, danY_increment = dy/steps.
6. Koordint selanjutnya, yaituX+X_incrementY+Y_increment
7. Posisi pixel ditentukan dengan pembulatan nilai koordinat tersebut.
8. Ulangi langkah 6 dan 7 untuk posisi selanjutnya sampai X = X1, Y = Y1.

b. Berikur ini adalah algoritma BRESSENHAM :
Tujuan dari algoritma Bressenham ini adalah untuk menghindari pembulatan nilai seperti pada algoritma DDA.
1. Tentukan dua titik yang akan dihubungkan dalam pembentukan garis.
2. Tentukan salah satu titik di sebelah kiri sebagai titi awal, yaitu (x0,y0) dan titik lainnya sebgai titik akhir (x1,y1).
3. Hitung dx,dy,2dx dan 2dy-2dx.
4. Hitung parameter P0 = 2dy-dx
5. Untuk setiap Xk sepanjang jalur garis, dimulai dengan k=0,bila pk <0,>k+1, yk), dan Pk+1 = Pk+2dybila tidak, maka titik selanjutnya adalah (xk+1,yk+1), dan Pk+1 = Pk+2dy-2dx
6. Ulangi langkah no 5 untuk menentukan posisi pixel selanjutnya, sampai x = x1 dan y = y1.

2.3.3    Algoritma Pembentukan Lingkaran dan elipse
a.  Algoritma Pembentukan Lingkaran
ecara umum prosedur pembentuk lingkaran dibuat dengan rumus dasar x2+y2=R2. Terdapat beberapa cara untuk membentuk suatu lingkaran namun tidak efisien. Lingkaran dapat dibuat dengan menggambarkan seperempat lingkaran karena bagian lain dapat dibuat sebagai bagian yang simetris.
1.      Algoritma Simetris delapan titik
Pada algoritma ini pembuatan lingkaran dilakukan dengan menentukan satu titik awal. Bila titik awal pada lingkaran(x,y) maka terdapat tiga posisi lain, sehingga dapat diperoleh delapan titik. Dengan demikian sebenarnya hanya diperlukan untuk menghitung segmen 45’ dalama menentukan lingkaran selengkapnya.
Dengan titik pusat lingkaran tertentu, delapan titik simetris dapat ditampilkan dengan prosedur Circle Point Sebagai berikut:
procedure CirclePoints(x, y, value:integer);
begin
putPixel(x,y,value);
putPixel(-x,y,value);putPixel(x,-y,value);
putPixel(-x,-y,value);
putPixel(y,x,value);
putPixel(-y,x,value);
putPixel(y,-x,value);
putPixel(-y,-x,value);
end;
2.      Algoritma Lingkaran Midpoint
Algoritma Lingkaran Midpoint juga disebut algoritma lingkaran Bressenham. Bressenham mengembangkan generator lingkaran yang cukup efisien. Algoritma yang digunakan membentuk semua titik berdasarkan titik pusat dengan penambahan semua jalur sekeliling lingkaran. Algoritma ini diturunkan dari algoritma Midpoint untuk pembentukan garis. Dalam hal ini hanya diperhatikan bagian 45’ dari suatu lingkaran, yaitu oktan kedua dari x=0 ke x=R/√2, dan menggunakan CirclePoints untuk menampilkan titik dari seluruh lingkaran. Langkah langkah untuk membentuk lingkaran algoritma Circle Midpoint:
1. Tentukan radius r dengan titk pusat lingkaran(xc,yc) kemudian diperoleh (x0,y0)=(0,r)
2. Hitung nilai dari parameter P0=5/4­r
3. Tentukan nilai awal k=0, untuk setiap posisi xk berlaku sebagai berikut:
Bila Pk< 0, maka titik selanjutnya adalah (xk+1,yk))dan
Pk+1=Pk+2xk+1+1
Bila tidak, maka selanjutnya adalah(xk+1,yk­1), dan Pk+1=Pk+2xk+1+1­ 2yk+1
Dimana 2xk+1=2xk+2 dan 2yk+=2yk­2
4. Tentukan titik simetris pada ketujuh oktan yang lain5. Gerakkan setiap posisi pixel(x,y) pada garis melingkar dari lingkaran dengan titik pusat (xc,yc) dan tentukan nilai koordinat:
x=x+xcy=y+yc
6. Ulangi langkah ke­3 sampai 5, sehingga x>=y
b. Algoritma Pembentukan elipse
Elips merupakan modifikasi dari bentuk lingkaran, dengan memasukkan mayor dan minor axis pada prosedur lingkaran. Elips ditentukan oleh satu set titik dengan memperhitungkan jumlah jarak dari kedua posisi(foci). Bila jarak ke kedua foci dari sembarang titik p(x,y) pada elips diberi label d1 dan d2, maka persamaan elips menjadi :
d1+d2=konstan
Untuk menggambarkan jarak d1 dan d2 dengan ketentuan koordinat masing masing
            F1(1(x1,1,y1) 1) 1) dan F2(2(X2,2,Y2)
Ö((xx1)2+(yy1)2)2+Ö((xx2)2+(yy2)2=konstan
Dimana mayor dan minor axis elips dalam posisi pararel dengan sumbu x dan sumbu y pada contoh ini, parameter rx disebut semi major axis dan ry disebut semi minor axis, sehingga persamaan elips dengan parameter rx dan ry menjadi :
((xrc)/rx)2 + ((yyc)/ry)2=1



Algoritma elips Midpoint
Untuk algoritma pembentukan elips, pendekatan yang dilakukan sama dengan penggunaan pada saat menampilkan lingkaran. Dengan parameter untuk elips pada posisi standar, yaitu rx, ry, dan(xc,yc). Bila elips ditampilkan pada posisi standar, maka dapat dilakukan dengan memutar elips tersebut menurun koordinat titik pusat, dan mendapatkan kembali mayor dan minor axis.
Metode midpoint untuk elips dijalankan pada kuadran pertama dalam dua bagian. Bagian pertama menrut kemiringan elips rx<ry. Penambahan dengan unit step pada arah sumbu x dilakukan bila slope lebih kecil dari 1, dan dengan unit step menurut sumbu y bila kemiringan lebih besar dari 1.
Bagian 1 dan 2 dapat digunakan untuk bermacam macam cara. Pertama dimulai dari posisi (0,ry) dan step searah jarum jam sepanjang jalur elips pada kuadran pertama. Pergeseran dengan unit step dalam x pada saat slope lebih besar dari 1.
Alternatif lain, dimulai dari (rx,0) dan seleksi titik dalam arah berlawanan dengan arah jarum jam. Penggeseran unit step y ke unit step x pada saat kemiringan lebih besar dari 1. dengan prosesor pararel, posisi pixel dapat dihitung dalam dua bagian sekaligus.

Pembentukan elips menurut algoritma Circle midpoint sebagai berikut:
1.Tentukan rx,ry dan pusat elips (xc,yc) kemudian diperoleh (xo,yo)=(0,ry)
2.Hitung nilai parameter P10=ry2rx2 ry+1/4 rx2
3.Tentukan nilai awal k=0, untuk setiap posisi xk k berlaku sebagai berikut :
Bila p1k< 0 maka titik selanjutnya adalah (xk+1, yk)
p1k+1k+1k+1=p1k+2ry2xk+1k+1k+1+ry2
Bila tidak, maka titik selanjutnya adalah (xk+!,yk1) dan
p1k+1k+1k+1=p1k+2ry2xk+1k+1k+12rx yk+1k+1k+1+ry2
dengan
2ry2xk+1k+1k+1=2ry2xk k +2ry2
Dan
2rx yk+1k+1k+1=2rx2 yk k +2rx2
Teruskan sampai 2ry2x >= 2rx2 y
4.Tentukan nilai parameter pada bagian kedua menggunakan titik terakhir (x0,y0 ) yang telah dihitung pada bagian pertama, sebagai berikut :
P2k+1=k+1=k+1=k+1=2ry2 2 (xo+1/2)2+2rx2 2 (yo1)2rx2 ry2
5.Setiap posisi yk k pada bagian kedua, dimulai dengan k=0
-    Bila p2k> 0 maka titik selanjutnya adalah (xk, yk1)
p2k+1k+1k+1=p2k+2rx2yk+1k+1k+1+rx2
-          Bila tidak, maka titik selanjutnya adalah (xk+1,yk1) dan
p2k+1k+1k+1=pk+2ry2xk+1k+1k+12rx yk+1k+1k+1+ry2
6.Tentukan titik simetris pada ketiga kuadran lainnya
7.Gerakkan setiap posisi(x,y) pada garis melingkar dari elisp dengan titik pusat(xc,yc) dan tentukan nilai koordinat
x=x+xc y=y+yc
8.Ulangi langkah untuk bagian pertama di atas, sehingga 2ry2x >= 2rx2 y

2.3.4    Fill Area Primitif
            Fill area (pengisian area) output primitif standar pada paket aplikasi grafika pada umumnya adalah warna solid atau pola raster. Terdapat dua dasar pendekatan untuk mengisi area pada raster sistem. Menentukan overlap interval untuk scan line yang melintasi area Dengan memulai dari titik tertentu pada posisi di dalam poligon. Berikut adalah algoritma Fill Area  :
a.       Algoritma Boundary-Fill
Metode ini bermanfaat untuk paket aplikasi grafik interaktif, dimana titik dalam dapat dengan mudah ditentukan. Prosedurnya yaitu menerima input koordinat dari suatu titik (x,y), warna isi dan warna garis batas. Ada dua macam metode yaitu 4-connected dan 8-connected.

b.      Algoritma Flood-Fill
Metode ini dimulai pada titik (x,y) dan mendefinisikan seluruh pixel pada bidang tersebut dengan warna yang sama. Bila bidang yang akan diisi warna mempunyai beberapa warna, pertama-tama yang dilakukan adalah membuat nilai pixel yang baru, sehingga semua pixel mempunyai warna yang sama.





2.4 ATRIBUT OUTPUT PRIMITIF
                  Pada umumnya, setiap parameter yang memberi pengaruh pada output primitif ditampilkan sesuai dengan parameter atribut.
2.4.1    Atribut Kurva dan Garis
a. Atribut Garis
Atribut dasar untuk garis lurus adalah style (tipe garis), width (tebal) dan color(warna). Dalam beberapa paket aplikasi grafik, garis dapat ditampilkan dengan mengunakan Pen.

b. Atribut Kurva
Parameter untuk atribut kurva sama dengan atribut segmen garis. Kurva dapat ditampilkan dengan berbagai warna, tebal, dot-dash(Style garis) dan pilihan pen atau brush. Selain itu untuk pengisian suatu bidang tertentu termasuk memilih warna antara solid dan pattern tertentu dan memilih warna pattern yang ada.

2.4.2    Warna dan Grayscale
Ketika suatu sistem menyediakan opsi warna, suatu parameter akan memberikan
indeks warna awal yang dimasukkan ke dalam daftar nilai atribut sistem. suatu prosedur
polyline kemudian akan menampilkan garis dengan warna tersebut dengan cara mengatur
warna tersebut d frame buffer pada lokasi piksel sepanjang garis tersebut dengan
menggunakan prosedur setPixel.
a.       Warna
Pada system raster pilihan nomor warna bergantung pada jumlah bit yang tersedia  per pixel di frame buffer. Iformasi warna yang dapat disimpan di frame buffer dengan dua cara yaitu :
1. kode warna disimpan secara langsung di frame buffer
2. kode warna disimpan di table warna yang terpisah dan gunakan nilai pixel
sebagai indeks ke table tersebut
Dengan menggunakan skema penyimpanan langsung ketika kode warna tertentu  dispesifikasikan pada suatu program aplikasi, nilai biner yang ditunjuk ditempatkan di  frame buffer untuk setiap pixel komponen pada primitive output untuk menampilkan warna tersebut. Numlah minimum warna yang disediakan dengan 3 bit penyimpanan per
pixel dapat dilihat pada tabel 4.1
Ada beberapa keuntungan menyimpan kode warna di tabel lookup. Penggunaan
tabel warna dapat menyediakan jumlah yang warna simultan tanpa membutuhkan frame  buffer yang besar. Untuk banyak aplikasi, 256 atau 512 warna yang berbeda sudah  untuk sebuah gambar tunggal. Skema untuk penyimpanan nilai warna pada suatu tabel  warna, dimana nilai frame-buffer digunakan sebagai  indeks pada tabel warna  diilustrasikan pada gambar 4.x.
Pada gambar tersebut diperlihatkan suatu tabel warna dengan ukuran 24 bit per
entry diakses dari frame buffer dengan ukuran 8 bit per pixel. Nilai 196 disimpan di
posisi pixel (x,y) yang menunjuk pada lokasi di tabel yang berisikan nilai 2081. tiap
segmen 8 bit mengendalikan tingkat intensitas satu  dari tiga electron gun in monitor
RGB.

b.      GrayScale
Untuk Monitor yang tidak memiliki kapabilitas warna, fungsi warna dapat  digunakan pada program aplikasi dengan cara menentukan tingkat keabuan (gray scale)  untuk menampilkan primitive. Nilai numeric antara 0 dan 1 dapat digunakan untuk  menspesifikasikan tingkat grayscale dan kemudian dikonversi menjadi nilai biner untuk
penyimpanan di system raster. Prosedur ini memungkinkan penentukan intensitas dapat
lebih mudah diadaptasi ke system dengan kapabilitas grayscale yang berbeda.
Spesifikasi dari konde intensitas untuk system dengan 4 level grayscale dapat  dilihat pada tabel 4.2. Pada tabel tersebut semua input dengan nilai intensitas 0.33 akan  disimpan sebagai nilai biner 01 di frame buffer dan pixel dengan nilai tersebut akan  ditampilkan sebagai dark gray (abu-abu gelap). Jika bit tambahan per pixel tersedia di
frame buffer dan nilai 0.33 akan dipetakan ke level terdekat. Dengan 3 bit per pixel kita
dapat mengakomodasi 8 level keabuan, jika system memiliki ukuran 8 bit per pixel maka
akan dapat ditampilkan 256 level keabuan

2.5 TRANSFORMASI DUA DIMENSI
Transformasi dua dimensi adalah suatu model atau bentuk atau teknik-teknik memindahkan atau mengubah nilai posisi objek dalam sistem koordinat dua dimensi. Pemindahan objek ini dapat diartikan sebagai pemindahan titik.


2.5.1    Translasi
Translasi adalah suatu pergerakan/perpindahan semua titik dari  objek pada suatu jalur lurus sehingga menempati posisi baru. Jalur yang direpresentasikan oleh vektor disebut Translasi atau  Vektor Geser.
Ada dua cara yang dapat digunakan untuk mentransformasi gambar yaitu :
a.       Transformasi objek
Definisinya adalah mengubah koordinat-koordinat dari tiap-tiap titik di objek dengan beberapa aturan, meninggalkan underlying system koordinat yang tidak bisa di ubah lagi.
b.      Transformasi koordinat
Definisinya adalah system koordinat yang baru di buat sebelumnya merupakan semua titik objek dalam system yang baru.

2.5.2    Rotasi
Rotasi terdiri dari 2 macam: rotasi melawan arah jarum jam (counter-clockwise) dan rotasi searah jarum jam (clockwise). Mengapa ada dua jenis transformasi?
a.  Susah untuk menentukan mana yang disebut sudut negatif dan positif , karena di dunia toolspemrograman, kuadran pi adalah counter-clockwise (melawan arah jarum jam), sedangkan di dunia ilmu pengetahuan, kuadran pi adalah clockwise (searah jarum jam)
b. Oleh karena itu, untuk mempermudah, maka disepakati untuk menyebutkan arah rotasi untuk setiap transformasinya, sehingga menghilangkan kebingungan.

2.5.3    Skala
Transformasi skala adalah perubahan ukuran suatu objek. Koordinat baru diperoleh dengan melakukan perkalian koordinat dengan ascling factor, yaitu(sx,sy) dimana sx adalah scaling facor untuk sumbu x dam sy adalah scaling factor untuk sumbu y. koordinat baru titik yang diskala dapat diperoleh dengan  x’ = x.sx y’= y.sy scaling factor sx dan sy dapat diberikan sembarang nilai positif. Nilai lebih dari 1 menandakan bahwa sebuah objek diperbesar sedang nilai nilai kurang dari 1 menunjukkan bahwa objek diperkecil.




BAB III
PERANCANGAN APLIKASI

3.1  Perancangan Menu

Aplikasi

Zoom

Rotasi

Pewarnaan

Tranlasi















Gambar 3.1 Perancangan Menu

3.2  Perancangan Antar Muka Pengguna


Gambar 3.2 Perancangan Antar Muka




BAB IV   
IMPLEMENTASI PROGRAM

4.1 Perangkat Keras yang Digunakan

Penyelesaian Aplikasi Grafika Komputer Menggunakan lazarus dibuat dengan didukung oleh komponen perangkat keras dengan spesifikasi sebagai berikut :

1.      Komputer Pesonal dengan processor min P1800Mhz atau yang lebih tinggi.
2.      RAM 32 MB atau lebih tinggi.
3.      Minimal HD 15 GB atau lebih tinggi.
4.      VGA minimal 128 MB atau lebih tinggi.
5.      Mouse dan Keyboard.

4.2Perangkat Lunak yang Digunakan
Untuk merancang Aplikasi Grafika Komputer Menggunakan lazarus dibutuhkan beberapa  perangkat lunak pendukung. Adapun perangkat lunak yang mendukung Sistem Aplikasi Intranet Arsip Digital ini untuk diimplementasikan pada system membutuhkan perangkat lunak (software) sebagai berikut :
1.      Sistem Operasi yang digunakan adalah Microsoft XP, Vista, 7, dan 8
2.      Lazarus projeck versi :#09.30.04 for windows
4.3 Tampilan dan Modul Program
a. Tampilan Program











Gambar 4.1 Tampilan Program
b.Modul Program
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls, Spin, ButtonPanel, Buttons, ColorBox, PairSplitter, Arrow;

type
  Elemen=record
       x,y: Integer;
    end;

  { TForm1 }

  TForm1 = class(TForm)
    bGeserSampingKeAtas: TBitBtn;
    bGeserBawahKeKiri: TBitBtn;
    bGeserBawahKeKanan: TBitBtn;
    bGeserSampingKeBawah: TBitBtn;
    bUbahGaris: TBitBtn;
    ColorDialog1: TColorDialog;
    kesamping: TBitBtn;
    kebawah: TBitBtn;

    bKeluar: TBitBtn;
    bKiriAtas: TBitBtn;
    bPrisma: TBitBtn;
    bReset: TBitBtn;
    bSegitiga: TBitBtn;
    bTrapesium: TBitBtn;
    bPersegipanjang: TBitBtn;
    bSegitiga3D: TBitBtn;
    bAtas: TBitBtn;
    Image2: TImage;
    Image3: TImage;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    pKiri: TBitBtn;
    pKanan: TBitBtn;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Putar: TLabel;
    rfill: TGroupBox;
    SpinEdit2: TSpinEdit;
    SpinEdit3: TSpinEdit;
    SpinEdit4: TSpinEdit;
    UbahUkuran: TLabel;
    ZoomIn: TBitBtn;
    ZoomOut: TBitBtn;
    bKananAtas: TBitBtn;
    bBawah: TBitBtn;
    bKiriBawah: TBitBtn;
    bKananBawah: TBitBtn;
    bKiri: TBitBtn;
    bKanan: TBitBtn;
    bsegitigasikusiku: TBitBtn;
    ColorBox1: TColorBox;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    GroupBox6: TGroupBox;
    Image1: TImage;
    Label1: TLabel;
    SpinEdit1: TSpinEdit;
    tSudut: TSpinEdit;
    Splitter1: TSplitter;

    procedure bAtasClick(Sender: TObject);
    procedure bBawahClick(Sender: TObject);
    procedure BitBtn17Click(Sender: TObject);
    procedure bGeserSampingKeAtasClick(Sender: TObject);
    procedure bGeserBawahKeKiriClick(Sender: TObject);
    procedure bGeserBawahKeKananClick(Sender: TObject);
    procedure bGeserSampingKeBawahClick(Sender: TObject);
    procedure bUbahGarisClick(Sender: TObject);
    procedure kesampingClick(Sender: TObject);
    procedure bKananAtasClick(Sender: TObject);
    procedure bKananBawahClick(Sender: TObject);
    procedure bKananClick(Sender: TObject);
    procedure bKeluarClick(Sender: TObject);
    procedure bKiriAtasClick(Sender: TObject);
    procedure bKiriBawahClick(Sender: TObject);
    procedure bKiriClick(Sender: TObject);
    procedure bSegitiga3DClick(Sender: TObject);
    procedure bsegitigasikusikuClick(Sender: TObject);
    procedure bPersegipanjangClick(Sender: TObject);
    procedure bPrismaClick(Sender: TObject);
    procedure bResetClick(Sender: TObject);
    procedure bSegitigaClick(Sender: TObject);
    procedure bTrapesiumClick(Sender: TObject);
    procedure ColorBox1Change(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure kebawahClick(Sender: TObject);
    //procedure Label8Click(Sender: TObject);

    procedure pKananClick(Sender: TObject);
    procedure pKiriClick(Sender: TObject);
    procedure ResetClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
    procedure SpinEdit2Change(Sender: TObject);
    procedure SpinEdit3Change(Sender: TObject);
    procedure ZoomInClick(Sender: TObject);
    procedure ZoomOutClick(Sender: TObject);
    procedure TitikTengahObjek(Sender :TObject);
    procedure BoundaryFill(x,y,fill,boundary:Integer);
    procedure Image1DblClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  //Objek: array[1..60] of Elemen;
  j,k : Integer;
  Objek, temp, free, source, sm, gbr: array [1..50] of elemen;
  bangun, i, titik, f  : integer;
  boundary : TColor;
  tob : elemen;
  sudut : real;
  rotasi : integer ;
  xc,yc,r :integer;
  geser : integer;
  fx, fy : integer;
  poly : integer;
  Sdt : real;



implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormActivate(Sender: TObject);
begin

end;

procedure TForm1.kebawahClick(Sender: TObject);
begin
  for i:=1 to titik do
    begin
      temp[i].y:=(objek[i].y-(2*(objek[i].y-tob.y)));
      temp[i].x:=objek[i].x;
    end;
    for i:=1 to titik do
    begin
      objek[i].y:=temp[i].y;
      objek[i].x:=temp[i].x;
    end;
    FormShow(Sender);
    TitikTengahObjek(Sender);
    BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;



procedure TForm1.bsegitigasikusikuClick(Sender: TObject);
begin
    bangun:=5; titik:=5; poly:=1;
    Objek[1].x := 70;                Objek[1].y := 50;
    Objek[2].x := 140;                Objek[2].y := 150;
    Objek[3].x := 70;                 Objek[3].y := 150;
    Objek[4].x := 70;                Objek[4].y :=50;
    Objek[5].x := 70;                Objek[5].y :=50;

    TitikTengahObjek(Sender);
    FormShow(Sender);
    //BoundaryFill(tob.x,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bPersegipanjangClick(Sender: TObject);
begin
    bangun:=4; titik:=5; poly:=1;
    Objek[1].x := 70;                 Objek[1].y := 50;
    Objek[2].x := 250;                Objek[2].y := 50;
    Objek[3].x := 250;                Objek[3].y := 150;
    Objek[4].x := 70;                 Objek[4].y :=150;
    Objek[5].x := 70;                 Objek[5].y := 50;

    TitikTengahObjek(Sender);
    FormShow(Sender);
end;

procedure TForm1.bPrismaClick(Sender: TObject);
begin
    bangun:=3; titik:=5; poly:=1;
    Objek[1].x := 100;                Objek[1].y := 50;
    Objek[2].x := 150;                Objek[2].y := 90;
    Objek[3].x := 130;                Objek[3].y := 150;
    Objek[4].x := 70;                 Objek[4].y :=150;
    Objek[5].x := 50;                 Objek[5].y := 90;

    TitikTengahObjek(Sender);
    FormShow(Sender);

end;

procedure TForm1.bResetClick(Sender: TObject);
begin
  Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
end;

procedure TForm1.TitikTengahObjek (Sender :TObject);
begin
   tob.x :=0;
   tob.y:=0;
    for i:=1 to titik do
        begin
        tob.x:=tob.x+objek[i].x;
        tob.y:=tob.y+objek[i].y;
        end;
    tob.x:=tob.x div titik;
    tob.y:=tob.y div titik;
end;

procedure TForm1.BoundaryFill(x,y,fill,boundary:Integer);
var
   current:Integer;
begin
   current:=Image1.Canvas.Pixels[x,y];
   if((current<>boundary)and(current<>fill))then
   begin
        Image1.Canvas.Pixels[x,y]:=fill;
        Boundaryfill(x+1,y,fill,boundary);
        Boundaryfill(x-1,y,fill,boundary);
        Boundaryfill(x,y+1,fill,boundary);
        Boundaryfill(x,y-1,fill,boundary);
   end;

end;

procedure TForm1.ColorBox1Change(Sender: TObject);
begin
    if(bangun=7) then
    BoundaryFill(xc,yc,ColorBox1.Selected,Image1.Canvas.Pen.Color)
  else if (poly=1)  then
    BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.Image1DblClick(Sender: TObject);
begin
  Image1.Canvas.LineTo(objek[1].x,objek[1].y);
  poly:=1;
end;


procedure TForm1.bSegitigaClick(Sender: TObject);
begin
  bangun:=1; titik:=5; poly:=1;
    Objek[1].x := 100;                Objek[1].y := 50;
    Objek[2].x := 170;                Objek[2].y := 150;
    Objek[3].x := 30;                 Objek[3].y := 150;
    Objek[4].x := 100;                Objek[4].y :=50;
    Objek[5].x := 100;                Objek[5].y :=50;
    Objek[6].x := 100;                Objek[6].y :=50;
    Objek[7].x := 100;                Objek[7].y :=50;
    Objek[8].x := 100;                Objek[8].y :=50;
    Objek[9].x := 100;                Objek[9].y :=50;
    Objek[10].x := 100;                Objek[10].y :=50;
    Objek[11].x := 100;                Objek[11].y :=50;
    Objek[12].x := 100;                Objek[12].y :=50;
    Objek[13].x := 100;                Objek[13].y :=50;
    Objek[14].x := 100;                Objek[14].y :=50;

    TitikTengahObjek(Sender);
    FormShow(Sender);
end;

procedure TForm1.bTrapesiumClick(Sender: TObject);
begin
    bangun:=2; titik:=5; poly:=1;
    Objek[1].x := 100;                Objek[1].y := 50;
    Objek[2].x := 250;                Objek[2].y := 50;
    Objek[3].x := 250;                Objek[3].y := 150;
    Objek[4].x := 30;                 Objek[4].y :=150;
    Objek[5].x := 100;                Objek[5].y := 50;

    TitikTengahObjek(Sender);
    FormShow(Sender);
end;

procedure TForm1.bAtasClick(Sender: TObject);
begin
  for j:=1 to 14 do
      Objek[j].y := Objek[j].y-(SpinEdit1.Value);
  FormShow(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bBawahClick(Sender: TObject);
begin
  for j:=1 to 14 do
      Objek[j].y := Objek[j].y+(SpinEdit1.Value);
  FormShow(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.BitBtn17Click(Sender: TObject);
begin

end;

procedure TForm1.bGeserSampingKeAtasClick(Sender: TObject);
begin
  for i:=1 to titik do
     begin
          objek[i].x:=objek[i].x-tob.x;
          Objek[i].y:=objek[i].y-tob.y;
          if(objek[i].x>0) then
          begin
             temp[i].y:=objek[i].y-StrToInt(SpinEdit4.Text);
          end
          else
          temp[i].y:=objek[i].y;
          temp[i].x:=objek[i].x;
          objek[i]:=temp[i];
          objek[i].x:=objek[i].x+tob.x;
          objek[i].y:=objek[i].y+tob.y;
     end;
  FormShow(Sender);
  TitikTengahObjek(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bGeserBawahKeKiriClick(Sender: TObject);
begin
for i:=1 to titik do
     begin
          objek[i].x:=objek[i].x-tob.x;
          Objek[i].y:=objek[i].y-tob.y;
          if(objek[i].y>-0) then
          begin
             temp[i].x:=objek[i].x-StrToInt(SpinEdit4.Text);
          end
          else
          temp[i].x:=objek[i].x;
          temp[i].y:=objek[i].y;
          objek[i]:=temp[i];
          objek[i].x:=objek[i].x+tob.x;
          objek[i].y:=objek[i].y+tob.y;
     end;
  FormShow(Sender);
  TitikTengahObjek(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bGeserBawahKeKananClick(Sender: TObject);
begin
  for i:=1 to titik do
     begin
          objek[i].x:=objek[i].x-tob.x;
          Objek[i].y:=objek[i].y-tob.y;
          if(objek[i].y>0) then
          begin
             temp[i].x:=objek[i].x+StrToInt(SpinEdit4.Text);
          end
          else
          temp[i].x:=objek[i].x;
          temp[i].y:=objek[i].y;
          objek[i]:=temp[i];
          objek[i].x:=objek[i].x+tob.x;
          objek[i].y:=objek[i].y+tob.y;
     end;
  FormShow(Sender);
  TitikTengahObjek(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bGeserSampingKeBawahClick(Sender: TObject);
begin
  for i:=1 to titik do
     begin
          objek[i].x:=objek[i].x-tob.x;
          Objek[i].y:=objek[i].y-tob.y;
          if(objek[i].x>-0) then
          begin
             temp[i].y:=objek[i].y+StrToInt(SpinEdit4.Text);
          end
          else
          temp[i].y:=objek[i].y;
          temp[i].x:=objek[i].x;
          objek[i]:=temp[i];
          objek[i].x:=objek[i].x+tob.x;
          objek[i].y:=objek[i].y+tob.y;
     end;
  FormShow(Sender);
  TitikTengahObjek(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bUbahGarisClick(Sender: TObject);
begin
    if ColorDialog1.Execute then
     begin
     Image1.Canvas.Pen.Color:=ColorDialog1.Color;
     end;
   FormShow(Sender);
end;

procedure TForm1.kesampingClick(Sender: TObject);
begin
  for i:=1 to titik do
    begin
      temp[i].x:=(objek[i].x-(2*(objek[i].x-tob.x)));
      temp[i].y:=objek[i].y;
    end;
    for i:=1 to titik do
    begin
      objek[i].y:=temp[i].y;
      objek[i].x:=temp[i].x;
    end;
    FormShow(Sender);
    TitikTengahObjek(Sender);
    BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)

end;

procedure TForm1.bKananAtasClick(Sender: TObject);
begin
  for j:=1 to 14 do
               begin
      Objek[j].y := Objek[j].y-(SpinEdit1.Value);
      Objek[j].x := Objek[j].x+(SpinEdit1.Value);
               end;
  FormShow(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bKananBawahClick(Sender: TObject);
begin
  for j:=1 to 14 do  begin
      Objek[j].x := Objek[j].x+(SpinEdit1.Value);
      Objek[j].y := Objek[j].y+(SpinEdit1.Value);
         end;
  FormShow(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bKananClick(Sender: TObject);
begin
  for j:=1 to 14 do
      Objek[j].x := Objek[j].x+(SpinEdit1.Value);
  FormShow(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bKeluarClick(Sender: TObject);
begin
  Close();
end;

procedure TForm1.bKiriAtasClick(Sender: TObject);
begin
  for j:=1 to 14 do       begin
      Objek[j].x := Objek[j].x-(SpinEdit1.Value);
      Objek[j].y := Objek[j].y-(SpinEdit1.Value);
  end;
  FormShow(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bKiriBawahClick(Sender: TObject);
begin
  for j:=1 to 24 do
  begin
      Objek[j].x := Objek[j].x-(SpinEdit1.Value);
      Objek[j].y := Objek[j].y+(SpinEdit1.Value);
  end;
  FormShow(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bKiriClick(Sender: TObject);
begin
  for j:=1 to 14 do
      Objek[j].x := Objek[j].x-(SpinEdit1.Value);
  FormShow(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bSegitiga3DClick(Sender: TObject);
begin
  bangun:=6; titik:=14; poly:=1;
  Objek[1].x := 200;           Objek[1].y :=200;
  Objek[2].x := 250;          Objek[2].y :=50;
  Objek[3].x := 300;          Objek[3].y :=200;
  Objek[4].x := 300;          Objek[4].y :=200;
  Objek[5].x := 300;          Objek[5].y :=200;
  Objek[6].x := 250;           Objek[6].y :=250;
  Objek[7].x := 300;          Objek[7].y :=100;
  Objek[8].x := 350;          Objek[8].y :=250;
  Objek[9].x := 200;           Objek[9].y :=200;
  Objek[10].x := 250;         Objek[10].y :=250;
  Objek[11].x := 250;         Objek[11].y :=50;
  Objek[12].x := 300;          Objek[12].y :=100;
  Objek[13].x := 300;         Objek[13].y :=200;
  Objek[14].x := 350;            Objek[14].y := 250;

  TitikTengahObjek(Sender);
  FormShow(Sender);
end;

procedure TForm1.pKananClick(Sender: TObject);

begin
     sdt := StrToInt(SpinEdit2.Text)*pi/180;
     for i:=1 to titik do
     begin
        Objek[i].x:=Objek[i].x-tob.x;
        Objek[i].y:=Objek[i].y-tob.y;
        temp[i].x:=round(Objek[i].x*cos(Sdt)-Objek[i].y*sin(Sdt));
        temp[i].y:=round(Objek[i].x*sin(Sdt)+Objek[i].y*cos(Sdt));
        Objek[i]:=temp[i];
        Objek[i].x:= Objek[i].x+tob.x;
        Objek[i].y:= Objek[i].y+tob.y;
     end;
     FormShow(Sender);
     BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.pKiriClick(Sender: TObject);
begin
     sdt:=-StrToInt(SpinEdit2.text)*pi/180;
     for i:=1 to titik do
     begin
        Objek[i].x:=Objek[i].x-tob.x;
        Objek[i].y:=Objek[i].y-tob.y;
        temp[i].x:=round(Objek[i].x*cos(Sdt)-Objek[i].y*sin(Sdt));
        temp[i].y:=round(Objek[i].x*sin(Sdt)+Objek[i].y*cos(Sdt));
        Objek[i]:=temp[i];
        Objek[i].x:= Objek[i].x+tob.x;
        Objek[i].y:= Objek[i].y+tob.y;
     end;
     FormShow(Sender);
     BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;



procedure TForm1.ResetClick(Sender: TObject);
begin

end;



procedure TForm1.FormShow(Sender: TObject);
var
   i : Integer;
begin
   Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
   Image1.Canvas.MoveTo(Objek[5].x,Objek[5].y);
   for i:=1 to 5 do
   begin
        Image1.Canvas.LineTo(Objek[i].x,Objek[i].y);
   end;
      Image1.Canvas.MoveTo(Objek[8].x,Objek[8].y);
   for i:=6 to 8 do
   begin
        Image1.Canvas.LineTo(Objek[i].x,Objek[i].y);
   end;
   Image1.Canvas.MoveTo(Objek[10].x,Objek[9].y);
   for i:=9 to 10 do
   begin
        Image1.Canvas.LineTo(Objek[i].x,Objek[i].y);
   end;
   Image1.Canvas.MoveTo(Objek[12].x,Objek[12].y);
   for i:=11 to 12 do
   begin
        Image1.Canvas.LineTo(Objek[i].x,Objek[i].y);
   end;
   Image1.Canvas.MoveTo(Objek[14].x,Objek[14].y);
   for i:=13 to 14 do
   begin
        Image1.Canvas.LineTo(Objek[i].x,Objek[i].y);
   end;

   if(bangun=10) then
    begin
            Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
            Image1.Canvas.MoveTo(objek[5].x, objek[5].y);
            for i:=1 to 5 do
            Image1.Canvas.LineTo(objek[i].x, objek[i].y);
    end;

    if ((bangun<7) And (bangun>0)) then
       begin
       if(poly=1) then
            begin
            Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
            Image1.Canvas.MoveTo(objek[titik].x, objek[titik].y);
            for i:=1 to titik do
                Image1.Canvas.LineTo(objek[i].x, objek[i].y);
            end
       else
            begin
            Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
            Image1.Canvas.MoveTo(objek[1].x, objek[1].y);
            for i:=1 to titik do
                Image1.Canvas.LineTo(objek[i].x, objek[i].y);
            end
            end;

end;

procedure TForm1.SpinEdit1Change(Sender: TObject);
begin

end;

procedure TForm1.SpinEdit2Change(Sender: TObject);
begin

end;

procedure TForm1.SpinEdit3Change(Sender: TObject);
begin

end;

procedure TForm1.ZoomInClick(Sender: TObject);
begin
     if(bangun=6) then
     Begin
        r:= r div StrToInt(SpinEdit3.Text);
       // CircleMidPoint(xc,yc,r);
     end
     else
     begin
     for i:=1 to 14 do
     begin
        Objek[i].x:=Objek[i].x-tob.x;
        Objek[i].y:=Objek[i].y-tob.y;
        Temp[i].x:=round(Objek[i].x*SpinEdit3.value);
        Temp[i].y:=round(Objek[i].y*SpinEdit3.value);
        Objek[i]:=Temp[i];
        Objek[i].x:= Objek[i].x+tob.x;
        Objek[i].y:= Objek[i].y+tob.y;
     end;
     FormShow(Sender);
     end;
     BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.ZoomOutClick(Sender: TObject);
begin
     if(bangun=6) then
     Begin
        r:= r div StrToInt(SpinEdit3.Text);
       // CircleMidPoint(xc,yc,r);
     end
     else
     begin
     for i:=1 to 14 do
     begin
        Objek[i].x:=Objek[i].x-tob.x;
        Objek[i].y:=Objek[i].y-tob.y;
        Temp[i].x:=round(Objek[i].x/SpinEdit3.value);
        Temp[i].y:=round(Objek[i].y/SpinEdit3.value);
        Objek[i]:=Temp[i];
        Objek[i].x:= Objek[i].x+tob.x;
        Objek[i].y:= Objek[i].y+tob.y;
     end;
     FormShow(Sender);

     end;
     BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;



end.


















BAB V     
KESIMPULAN DAN SARAN

5.1.Kesimpulan
      Dari pembahasan dapat diambil kesimpulan sebagai berikut :
1.      Didalam pembuatan grafik di jaman serba teknologi kita bebas menentukan alat apa yang kita pakai, dan untuk memahami secara mendalam transformasi di dalam grafik komputer sangatlah penting menguasai ilmu matematik.
2.      Perbandingan hasil pembuatan program dengan menggunakan bahasa programan lebih sulit dan berbeda jauh dari segi tampilan. Maupun tata cara pembuatannya di bandingkan dengan program aplikasi yang menerapkan system just clik(event driven).

5.2.Saran
      Setelah melihat uraian diatas, penyusun mempunyai saran.
1.      Terlebih dahulu belajar algoritma, karena algoritma adalah salah satu kunci untuk dapat memahami permasalahan yang akan di hadapi didalam pembuatan grafika komputer.
2.      Bila ingin membuat suatu gambar/grafik, pilihlah program aplikasi yang lebih bagus menurut anda, lebih kompleks, dan yang khusus menangani pembuatan gambar/grafik serta yang mengikuti perkembangan jaman.
3.      Harus memahami sintak-sintak (bahasa penulisan dalam bahasa pemrograman) yang terdapat dalam bahasa pemrograman ataupun fitur-fitur yang terdapat di dalam program aplikasi.









DAFTAR PUSTAKA

-          http://lavenderroses-aathirah.blogspot.com/2011/04/algoritma-pembentukan-elips.html (diakses tgl 26 juni 2012 pukul 23.30)

-          http://dhityatriez.blogspot.com/2009/10/output-primitif.html  (diakses tgl 26 juni 2012 pukul 23.40)

-          http://danangjunaedi.files.wordpress.com/2009/02/grafika-komputer-bab-iv-atribut-output-primitif-_rev_.pdf   (diakses tgl 27 juni 2012 pukul 07.10)

-          http://chacaatmika.blogspot.com/2012/04/transformasi-geometrik-2-dimensi.html (diakses tgl 27 juni 2012 pukul 07.20)

-          http://seputarkomputerjoe.blogspot.com/2010/07/normal-0-false-false-false.html (diakses tgl 27 juni 2012 pukul 07.55)



0 Response to "APLIKASI GRAFIKA KOMPUTER MENGGUNAKAN LAZARUS"

Post a Comment