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/4r
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,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 pusat (xc,yc) dan
tentukan nilai koordinat:
x=x+xcy=y+yc
6. Ulangi langkah ke3 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
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