Aplikasi Grafika Komputer Memakai 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 ketika ini memungkinkan insan untuk tidak menggambarkan memakai media kertas. Dengan adanya kebutuhan insan yang semakin meningkat dan harapan untuk mendapatkan sebuah hasil yang lebih manis dan cepat, maka di buat banyak sekali agenda aplikasi untuk sanggup memungkinkan insan menggambarkan memlalui media komputer.
Namun, tidak hanya agenda aplikais yang dikhususkan untuk menggambar grafik saja yang sanggup menggambar grafik. Akan tetapi bahasa pemrogramanpun sanggup melaksanakan proses menggambar grafik, salah satunya yaitu, Turbo pascal, C , Lazarus dan yang lainnya.
1.2.Rumusan Masalah
Berdasarkan latar belakang duduk kasus yang ada maka sanggup dirumuskan masalahnya yaitu bagaimana membangun sebuah aplikasi Paint.
1.3.Batasan Masalah
Laporan ini hanya akan membahas antara lain ihwal :
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 menciptakan aplikasi Paint memakai bahasa pemrograman ialah Lazarus.
1.4.Tujuan Tugas Projek
Tujuan kiprah projek ini yaitu 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 ihwal Latar Belakang Masalah, Perumusan Masalah, Batasan Masalah, Tujuan Tugas Projek, Manfaat Tugas Projek, Sistematika Penulisan.
BAB II Teori Dasar
Merupakan bab yang berisikan kajian ihwal sistem informasi yang berafiliasi dengan duduk kasus yang diteliti.
BAB III Perancangan Aplikasi
Bab ini berisi ihwal perancangan aplikasi yanga akan di buat
BAB IV Implementasi Program
Bab ini berisi ihwal implementasi dari hasil rancangan disertai referensi data yang di input.
BAB V Kesimpulan dan Saran
Bab ini berisikan kesimpulan dan saran dari hasil menciptakan laporan ini.
DAFTAR PUSTAKA
BAB II
TEORI DASAR
2.1 GRAFIKA KOMPUTER
Grafika Komputer yaitu sebuah teknologi visualisasi berbasis komputer yang bisa 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 menciptakan gambar grafik atau gambaran realistic untuk seni, game komputer, foto dan film animasi. Istilah ”Grafik Komputer”ditemukan tahun 1960 oleh William Fetter : pembentukan disain model cockpit (Boeing) dengan memakai pen plotter dan referensi model badan insan 3 Dimensi.
Grafika Komputer intinya yaitu suatu bidang komputer yang memelajari cara-cara meningkatkan dan memudahkan komunikasi antara insan 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 yaitu video monitor. Pada umumnya memakai perancangan cathode-ray-tube (CRT).
Adapun operasinya secara garis besar yaitu :
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 berafiliasi dengan pancaran electron. Sinar yang dipancarkan fosfor cepat hilang, maka diharapkan suatu pengaturan semoga fosfor tetap menyala, caranya yaitu dengan refreshing yakni menembakkan elektron berulang kali pada posisi yang sama.
c. Jumlah titik maksimum yang sanggup ditampilkan pada monitor tanpa tumpang tindih dinamakan resolusi. Resolusi yaitu jumlah titik per centimeter yang sanggup ditempatkan berdasarkan 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 sanggup ditampilkan yaitu ¾.
2.2.2 Raster-Scan System
a. Jenis monitor grafika dengan CRT yang paling umum yaitu 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 memakai 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 bab kiri layar sehabis refreshing tiap scan line dinamakan dengan horizontal trace.
i. Pada simpulan tiap frame (1/80 hingga 1/60 tiap detik ) pancaran electron yang kembali ke atas dinamakan dengan vertical retrace.
j. Biasanya setiap frame ditampilkan dalam dua tahap memakai mekanisme interlaced refresh. Tahap pertama, pancaran electron menyalin berdasarkan 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 menciptakan gambar dengan satu garis pada suatu ketika (vector display), stroke writing atau kaligrafik display
c. Komponen garis sanggup digambarkan dan dilakukan refreshing oleh random-scan sistem.
d. Dirancang untuk menciptakan seluruh komponen garis dengan rate antara 30 hingga 60 tiap detik.
e. Hanya dirancang untuk aplikasi line drawing dan tidak sanggup menampilkan raster drawing
f.
2.3 OUTPUT PRIMITIF
Output/Grafis primitif yaitu bentuk geometri dasar yang sanggup dipakai 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 ihwal bagaimana cara object ditampilkan pada layar. Titik dan garis lurus yaitu bentuk geometri paling sederhana dan komponen gambar.
Borland C++ Builder menyediakan Canvas yang sanggup dipakai untuk menampilkan gambar maupun goresan pena 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 sanggup menggambar obyek apapun. Termasuk bentuk geometri dibawah merupakan bentuk- bentuk yang intinya berasal dari titik-titik. Operasi titik ini sering dipakai pada pengolahan gambaran (Image processing). Setiap titik pada monitor mempunyai 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 yaitu kumpulan titik-titik/pixel yang tersusun secara lurus dan linier dari titik awal hingga 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 yaitu dengan mengetahui titik awal dan titik akhir. Dengan mengetahui titik awal dan titik simpulan maka kita sanggup membentuk garis. Untuk menggambarkan proses pembuatan garis dari titik awal ke titik simpulan ada banyak sekali algoritma. Algoritam yang umum yaitu DDA dan Bresenham.
a. Berikur ini yaitu algoritma DDA :
1. Tentukan 2 buah titik.
2. Tentukan yang menjadi titik awal (X0,Y0) dan titik simpulan (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 hingga X = X1, Y = Y1.
b. Berikur ini yaitu algoritma BRESSENHAM :
Tujuan dari algoritma Bressenham ini yaitu untuk menghindari pembulatan nilai ibarat 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 simpulan (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 yaitu (xk+1,yk+1), dan Pk+1 = Pk+2dy-2dx
6. Ulangi langkah no 5 untuk menentukan posisi pixel selanjutnya, hingga x = x1 dan y = y1.
2.3.3 Algoritma Pembentukan Lingkaran dan elipse
a. Algoritma Pembentukan Lingkaran
ecara umum mekanisme pembentuk lingkaran dibentuk dengan rumus dasar x2+y2=R2. Terdapat beberapa cara untuk membentuk suatu lingkaran namun tidak efisien. Lingkaran sanggup dibentuk dengan menggambarkan seperempat lingkaran alasannya bab lain sanggup dibentuk sebagai bab 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 sanggup diperoleh delapan titik. Dengan demikian bekerjsama hanya diharapkan untuk menghitung segmen 45’ dalama menentukan lingkaran selengkapnya.
Dengan titik sentra lingkaran tertentu, delapan titik simetris sanggup ditampilkan dengan mekanisme 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 membuatkan generator lingkaran yang cukup efisien. Algoritma yang dipakai membentuk semua titik berdasarkan titik sentra dengan penambahan semua jalur sekeliling lingkaran. Algoritma ini diturunkan dari algoritma Midpoint untuk pembentukan garis. Dalam hal ini hanya diperhatikan bab 45’ dari suatu lingkaran, yaitu oktan kedua dari x=0 ke x=R/√2, dan memakai CirclePoints untuk menampilkan titik dari seluruh lingkaran. Langkah langkah untuk membentuk lingkaran algoritma Circle Midpoint:
1. Tentukan radius r dengan titk sentra lingkaran(xc,yc) kemudian diperoleh (x0,y0)=(0,r)
2. Hitung nilai dari parameter P0=5/4r
3. Tentukan nilai awal k=0, untuk setiap posisi xk berlaku sebagai berikut:
Bila Pk< 0, maka titik selanjutnya yaitu (xk+1,yk))dan
Pk+1=Pk+2xk+1+1
Bila tidak, maka selanjutnya adalah(xk+1,yk1), dan Pk+1=Pk+2xk+1+1 2yk+1
Dimana 2xk+1=2xk+2 dan 2yk+=2yk2
4. Tentukan titik simetris pada ketujuh oktan yang lain5. Gerakkan setiap posisi pixel(x,y) pada garis melingkar dari lingkaran dengan titik sentra (xc,yc) dan tentukan nilai koordinat:
x=x+xcy=y+yc
6. Ulangi langkah ke3 hingga 5, sehingga x>=y
b. Algoritma Pembentukan elipse
Elips merupakan modifikasi dari bentuk lingkaran, dengan memasukkan mayor dan minor axis pada mekanisme 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 referensi 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 ketika menampilkan lingkaran. Dengan parameter untuk elips pada posisi standar, yaitu rx, ry, dan(xc,yc). Bila elips ditampilkan pada posisi standar, maka sanggup 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 berdasarkan sumbu y bila kemiringan lebih besar dari 1.
Bagian 1 dan 2 sanggup dipakai 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 ketika 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 ketika kemiringan lebih besar dari 1. dengan prosesor pararel, posisi pixel sanggup dihitung dalam dua bab sekaligus.
Pembentukan elips berdasarkan algoritma Circle midpoint sebagai berikut:
1.Tentukan rx,ry dan sentra 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 yaitu (xk+1, yk)
p1k+1k+1k+1=p1k+2ry2xk+1k+1k+1+ry2
Bila tidak, maka titik selanjutnya yaitu (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 hingga 2ry2x >= 2rx2 y
4.Tentukan nilai parameter pada bab kedua memakai titik terakhir (x0,y0 ) yang telah dihitung pada bab 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 bab kedua, dimulai dengan k=0
- Bila p2k> 0 maka titik selanjutnya yaitu (xk, yk1)
p2k+1k+1k+1=p2k+2rx2yk+1k+1k+1+rx2
- Bila tidak, maka titik selanjutnya yaitu (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 bab 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 yaitu 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 yaitu algoritma Fill Area :
a. Algoritma Boundary-Fill
Metode ini bermanfaat untuk paket aplikasi grafik interaktif, dimana titik dalam sanggup dengan gampang ditentukan. Prosedurnya yaitu mendapatkan 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 yaitu menciptakan nilai pixel yang baru, sehingga semua pixel mempunyai warna yang sama.
2.4 ATRIBUT OUTPUT PRIMITIF
Pada umumnya, setiap parameter yang memberi efek pada output primitif ditampilkan sesuai dengan parameter atribut.
2.4.1 Atribut Kurva dan Garis
a. Atribut Garis
Atribut dasar untuk garis lurus yaitu style (tipe garis), width (tebal) dan color(warna). Dalam beberapa paket aplikasi grafik, garis sanggup ditampilkan dengan mengunakan Pen.
b. Atribut Kurva
Parameter untuk atribut kurva sama dengan atribut segmen garis. Kurva sanggup ditampilkan dengan banyak sekali warna, tebal, dot-dash(Style garis) dan pilihan pen atau brush. Selain itu untuk pengisian suatu bidang tertentu termasuk menentukan warna antara solid dan pattern tertentu dan menentukan warna pattern yang ada.
2.4.2 Warna dan Grayscale
Ketika suatu sistem menyediakan opsi warna, suatu parameter akan memperlihatkan
indeks warna awal yang dimasukkan ke dalam daftar nilai atribut sistem. suatu mekanisme
polyline kemudian akan menampilkan garis dengan warna tersebut dengan cara mengatur
warna tersebut d frame buffer pada lokasi piksel sepanjang garis tersebut dengan
menggunakan mekanisme setPixel.
a. Warna
Pada system raster pilihan nomor warna bergantung pada jumlah bit yang tersedia per pixel di frame buffer. Iformasi warna yang sanggup disimpan di frame buffer dengan dua cara yaitu :
1. instruksi warna disimpan secara eksklusif di frame buffer
2. instruksi warna disimpan di table warna yang terpisah dan gunakan nilai pixel
sebagai indeks ke table tersebut
Dengan memakai skema penyimpanan eksklusif ketika instruksi warna tertentu dispesifikasikan pada suatu agenda 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 sanggup dilihat pada tabel 4.1
Ada beberapa laba menyimpan instruksi warna di tabel lookup. Penggunaan
tabel warna sanggup 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 dipakai 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 mempunyai kapabilitas warna, fungsi warna sanggup digunakan pada agenda aplikasi dengan cara menentukan tingkat keabuan (gray scale) untuk menampilkan primitive. Nilai numeric antara 0 dan 1 sanggup dipakai untuk menspesifikasikan tingkat grayscale dan kemudian dikonversi menjadi nilai biner untuk
penyimpanan di system raster. Prosedur ini memungkinkan penentukan intensitas sanggup
lebih gampang diubahsuaikan ke system dengan kapabilitas grayscale yang berbeda.
Spesifikasi dari konde intensitas untuk system dengan 4 level grayscale sanggup 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 aksesori 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, bila system mempunyai ukuran 8 bit per pixel maka
akan sanggup ditampilkan 256 level keabuan
2.5 TRANSFORMASI DUA DIMENSI
Transformasi dua dimensi yaitu suatu model atau bentuk atau teknik-teknik memindahkan atau mengubah nilai posisi objek dalam sistem koordinat dua dimensi. Pemindahan objek ini sanggup diartikan sebagai pemindahan titik.
2.5.1 Translasi
Translasi yaitu 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 sanggup dipakai untuk mentransformasi gambar yaitu :
a. Transformasi objek
Definisinya yaitu 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 yaitu system koordinat yang gres 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 aktual , alasannya di dunia toolspemrograman, kuadran pi yaitu counter-clockwise (melawan arah jarum jam), sedangkan di dunia ilmu pengetahuan, kuadran pi yaitu clockwise (searah jarum jam)
b. Oleh alasannya itu, untuk mempermudah, maka disepakati untuk menyebutkan arah rotasi untuk setiap transformasinya, sehingga menghilangkan kebingungan.
2.5.3 Skala
Transformasi skala yaitu perubahan ukuran suatu objek. Koordinat gres diperoleh dengan melaksanakan perkalian koordinat dengan ascling factor, yaitu(sx,sy) dimana sx yaitu scaling facor untuk sumbu x dam sy yaitu scaling factor untuk sumbu y. koordinat gres titik yang diskala sanggup diperoleh dengan x’ = x.sx y’= y.sy scaling factor sx dan sy sanggup diberikan sembarang nilai positif. Nilai lebih dari 1 menerangkan bahwa sebuah objek diperbesar sedang nilai nilai kurang dari 1 memperlihatkan 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 dipakai yaitu Microsoft XP, Vista, 7, dan 8
2. Lazarus projeck versi :#09.30.04 for windows
4.3 Tampilan dan Modul 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 sanggup 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 agenda dengan memakai bahasa programan lebih sulit dan berbeda jauh dari segi tampilan. Maupun tata cara pembuatannya di bandingkan dengan agenda aplikasi yang menerapkan system just clik(event driven).
5.2.Saran
Setelah melihat uraian diatas, penyusun mempunyai saran.
1. Terlebih dahulu berguru algoritma, alasannya algoritma yaitu salah satu kunci untuk sanggup memahami permasalahan yang akan di hadapi didalam pembuatan grafika komputer.
2. Bila ingin menciptakan suatu gambar/grafik, pilihlah agenda aplikasi yang lebih manis berdasarkan 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 agenda aplikasi.
DAFTAR PUSTAKA
- https://ulanganbukahape.blogspot.com//search?q=aplikasi-grafika-komputer-menggunakan-lazarus (diakses tgl 26 juni 2012 pukul 23.30)
- https://ulanganbukahape.blogspot.com//search?q=aplikasi-grafika-komputer-menggunakan-lazarus (diakses tgl 26 juni 2012 pukul 23.40)
- https://ulanganbukahape.blogspot.com//search?q=aplikasi-grafika-komputer-menggunakan-lazarus (diakses tgl 27 juni 2012 pukul 07.20)
- https://ulanganbukahape.blogspot.com//search?q=aplikasi-grafika-komputer-menggunakan-lazarus (diakses tgl 27 juni 2012 pukul 07.55)
0 Response to "Aplikasi Grafika Komputer Memakai Lazarus"
Post a Comment