Selamat Datang di blog sederhana saya,Semoga apa yang Kalian Inginkan dapat terpenuhi disini.

Hak akses Object di Php ( Public, Protected, Private )

     Di dalam konsep pemrograman berorientasi object (OOP), setiap attribut atau function dapat di atur penggunaannya menggunakan keyword public, protected, atau private. Hal ini berguna untuk membatasi penggunaan attribute atau function. Contoh : anda punya sebuah function untuk koneksi ke database dan function tersebut hanya boleh digunakan oleh class yang berhubungan dengan database seperti melakukan query insert, update, delete atau read.
  1. public

     keyword public digunakan untuk attribute / variabel dan function yang bisa di gunakan atau diakses dari class manapun. Sebagai contoh adalah seperti jalan raya yang bisa digunakan oleh siapapun.
    <?php
    class Makhluk_Hidup{
    var $berat;
    public $tinggi;

    function __construct(){

    }
    function bernafas($nama,$alat){
    echo $nama." bernafas dengan ".$alat;
    }
    public function makan($makanan){
    echo "makan ".$makanan;
    }

    }
    ?>
    di atas merupakan contoh class bernama Makhluk_hidup yang memiliki attribute  berat dan tinggi. Pembuatan function tanpa disertai keyword public, protected, atau private secara default akan di anggap sebagai public. Sedangkan attribute dengan keyword var dianggap sebagai public. Contoh penggunaan :

    $hidup = new Makhluk_Hidup();
    $hidup->bernafas('manusia','paru-paru');//work
    $hidup->makan('nasi');// work

  2. private

     keyword private digunakan untuk attribute / variabel dan function yang hanya bisa di gunakan atau diakses dari classitu sendiri. Sebagai contoh, misalnya kita punya celana dalam yang hanya kita yang bisa memakainya sedangkan orang lain tidak boleh menggunakannya. contoh penggunaan :

    <?php
    class Makhluk_Hidup{
    var $berat;
    var $tinggi;

    function __construct(){

    }

    public function bernafas($nama,$alat){
    echo $nama." bernafas dengan ".$alat;
    }

    private function makan($makanan){
    echo "makan ".$makanan;
    }

    }

    class Manusia extends Makhluk_Hidup{

    function __construct(){
    echo "loading bernafas <br/>";
    }
    function makan($makanan){
    $this->makan($makanan);
    }

    }
    $adi = new Manusia();
    $adi->bernafas('adi','paru-paru'); // work
    $adi->makan('nasi');// not work
    ?>
    di atas merupakan contoh penggunaan keyword private. $adi adalah object dari class Manusia yang merupakan class turunan dari class Makhluk_Hidup. kita bisa memanggil function / method bernafas dari object $adi tapi tidak bisa mengakses function makan dari object $adi karena function makan merupakan function private yang hanya bisa di akses oleh class Makhluk_Hidup.

  3. protected

     keyword protected digunakan untuk attribute / variabel dan function yang hanya bisa di gunakan atau diakses dari classitu sendiri dan class turunan. Sebagai contoh, misalnya saya merupakan anak dari bapak saya. Dan bapak saya mempunyai motor dan rumah yang saya tentu bisa menggunakan rumah dan motor kepunyaan bapak saya. Sedangkan tetangga saya tidak bisa menggunakan motor dan rumah milik bapak saya tersebut.Contoh penggunaan :

    <?php
    class Makhluk_Hidup{
    var $berat;
    var $tinggi;

    function __construct(){

    }

    function bernafas($nama,$alat){
    echo $nama." bernafas dengan ".$alat;
    }

    function makan($makanan){
    echo "makan ".$makanan;
    }
    protected function berkembang_biak($cara){
    echo "berkembang biak dengan ".$cara;
    }
    }

    class Manusia extends Makhluk_Hidup{

    function __construct(){
    echo "loading bernafas <br/>";
    }
    function bekerja($tempat){
    echo "bekerja di ".$tempat;
    }
    function biak($cara){
    $this->berkembang_biak($cara);
    }

    }
    class Tumbuhan{

    function tes($cara){
    $this->berkembang_biak($cara);
    }
    }
    $manusia = new Manusia();
    $manusia->biak('beranak');// work
    $padi = new Tumbuhan();
    $padi->tes('beranak');// not work
    class Tumbuhan tidak bisa menggunakan function berkembang_biak() yang berada di class Makhluk_Hidup karena function  berkembang_biak() merupakan function protected yang hanya bisa di akses class Makhluk_Hidup dan class turunan dari class Makhluk_hidup.

        Sekian tulisan saya kali ini. Mohon maaf apabila ada kesalahan penulisan saya lanjutkan di lain kesempatan. Terima kasih.

    referensi :http://php.net/manual/en/language.oop5.visibility.php
Share:

Propel Criteria Object

      Untuk menampilkan data dari database ke progam, kita pasti tidak lepas dari query ke database seperti perintah SELECT, INSERT, DELETE, dan lain sebagainya. Secara default, symfony 1.4 menggunakan ORM untuk interaksi dengan database. ORM yang digunakan adalah PROPEL dan DOCTRINE. Dan untuk tulisan saya kali ini dan tulisan saya selanjutnya akan menggunakan PROPEL.

Menampilkan Semua Data

      Untuk menampilkan semua data, biasanya kita menggunakan query SELECT * FROM .....Coba lihat kode berikut.


public function executeIndex(sfWebRequest $request)
{
$this->barangs = BarangPeer::doSelect(new Criteria());
}

di atas merupakan function index yang berada di direktori inventory/apps/frontend/modules/liststok/action/actions.class.php.


$this->barangs = BarangPeer::doSelect(new Criteria());

function doSelect()merupakan function yang digunakan untuk menampilkan data. doSelect() mempunyai parameter object dari Criteria, juka object Criteria kosong, maka doSelect() akan menampilkan semua data dari table di database atau hasilnya sama dengan perintah "SELECT * FROM BARANG". BarangPeer merupakan model object dari tabel yang berada di database. Untuk mempelajari lebih jauh tentang object peer, anda bisa buka di direktory lib/model project symfony anda.

Menggunakan Criteria

      Criteria digunakan untuk membuat query sql dengan berbagai kriteria yang di inginkan seperti where, order by, limit dan lain lain. Untuk menggunakan Criteria anda harus mendefinisikan object dari criteria terlebih dahulu.

$criteria = new Criteria();

$criteria merupakanonject dari Criteria yang digunakan untuk memanipulasi criteria yang di inginkan.


$criteria = new Criteria();
$criteria->add(BarangPeer::STOCK,0,Criteria::EQUAL);
$this->barangs = BarangPeer::doSelect($criteria);

di atas sama dengan perintah "SELECT * FROM BARANG WHERE STOCK=0". Criteria::EQUAL digunakan untuk mencari data yang sama. Ada beberapa Criteria yang disediakan oleh Propel :


Criteria::EQUAL
Criteria::NOT_EQUAL
Criteria::GREATER_THAN, Criteria::GREATER_EQUAL
Criteria::LESS_THAN, Criteria::LESS_EQUAL
Criteria::LIKE, Criteria::NOT_LIKE
Criteria::CUSTOM
Criteria::IN, Criteria::NOT_IN
Criteria::ISNULL, Criteria::ISNOTNULL
Criteria::CURRENT_DATE, Criteria::CURRENT_TIME,
Criteria::CURRENT_TIMESTAMP

sesuai dengan namany, anda pasti sudah bisa menebak untuk apa Criteria tersebut.

      Sementara cukup sekian tulisan saya kali ini. Saya lanjutkan di lain kesempatan. Terima kasih.

references : http://symfony.com/legacy/doc/jobeet/1_3/en/06?orm=Propel
Share:

Membuat Modul di Symfony 1.4

      Selamat siang, melanjutkan tulisan saya sebelumnya tentang symfony, kalo sebelumnya kita sudah membuat aplikasi, model, form, dan filter, kali ini saya lanjutkan dengan membuat modul. modul merupakan folder / direktori dari setiap menu yang ada dalam aplikasi. Dalam modul terdapat action atau controller, template yang berisi file kode html atau tampilan dan file pendukung lainnya. Modul mempunyai dua jenis, yaitu modul admin dan tidak admin. Langsung saja ke TKP.

Modul Non Admin

      Untuk membuat modul non admin, kita tidak usah repot repot menulis kode satu persatu secara full manual, cukup ketik perintah berikut.

symfony propel:generate-module --non-verbose-templates --with-show nama_aplikasi nama_module nama_model 

kode di atas akan menghasilkan modul di dalam aplikasi yang agan tentukan. Contoh


kode di atas, saya membuat modul liststok pada aplikasi frontend dengan menggunakan model barang. Maka struktur direktori aplikasi frontend saya jadi seperti ini.


di dalam folder module terdapat folder modul liststok yang berisi folder actions dan template. template berisi file tampilan yang di dalamnya ada syntax html untuk membuat tampilan. Dan pada folder actions terdapat file action.php yang merupakan action / controller untuk modul liststok. Untuk menjalankannya, buka pada browser agan url

http://localhost/symfony/web/frontend_dev.php/liststok

symfony merupakan nama project agan, frontend_dev.php adalah nama aplikasi yang agan buat dan liststok adalah nama module yang akan di panggi. Dan coba lihat hasilnya. Kita sudah punya halaman yang sudah lengkap dengan operasi CRUD di dalamnya. Dan kira kira seperti inilah jadinya


Module Admin

       Module admin adalah module yang sudah dilengkapi dengan operasi CRUD, filter,sorting data. Jadi proses pembuatan aplikasi menjadi lebih cepat. Untuk membuat modul admin, ketik dan jalankan perintah berikut pada CMD.

symfony propel:generate-admin nama_aplikasi nama_model --module=nama_module

dan berikut adalah contoh yang saya pakai


syntax di atas saya membuat modul kategori di dalam aplikasi backend. Sehingga struktur folder aplikasi backend saya menjadi seperti berikut.


dan hasilnya di browser seperti berikut


kita sudah punya menu kategori lengkap dengan operasi CRUD, filter, dan sorting. Namun tampilan di atas sangat standart, kurang enak di lihat. Symfony sudah menyediakan tampilan default menu admin generator. Untuk menggunakannya cukup jalankan perintah berikut di CMD.

symfony plugin:publish-assets

dan coba muat ulang halaman admin tadi. Dan seperti inilah kira kira
 

Sementara cukup sekian tulisan saya kali ini. Insya allah saya lanjutkan di lain kesempatan.
Share:

Generate Aplikasi di Symfony 1.4

     Selamat pagi pemirsa, melanjutkan tulisan sebelumnya mengenai framework php symfony, kali ini saya lanjutkan bagaimana membuat aplikasi di symfony 1.4.

Koneksi Database

      sebagi contoh, di sini saya membuat database aplikasi inventory barang. Dengan struktur tabel seperti pada gambar di bawah.

untuk membuat koneksi ke database, buka file databases.yml yang berada pada folder config.

all:
propel:
class: sfPropelDatabase
param:
classname: PropelPDO
dsn: mysql:dbname=inventory;host=localhost
username: root
password:
encoding: utf8
persistent: true
pooling: true

silahkan isi sesuai koneksi ke database agan.
 sekarang waktunya kita bermain dengan command promt atau CMD. Cekidot.

Membuat Aplikasi

      Buka CMD dan masuk ke direktori project symfony dan ketikkan perintah berikut.

symfony generate:app nama_aplikasi

di atas adalah syntax untuk membuat aplikasi.Di sini saya membuat dua aplikasi yaitu frontend dan backend. Frontend untuk aplikasi yang akan di akses oleh user umum dan backend adalah aplikasi yang akan di akses oleh user di sisi admin.

dan hasilnya folder app saya terdapat dua folder aplikasi yaitu backend dan frontend sesuai perintah yang saya buat.

Menulis Schema

      Schema adalah file yang mendefinisikan struktur tabel di database. Schema berguna untuk membuat form, membuat model, bermigrasi ke DBMS yang lain dll. file Schema terdapat di folder config/schema.yml.
       Untuk menulis schema berdasarkan database yang telah dibuat, ketikkan perintah berikut di CMD.

symfony propel:build-schema

karenasaya memakai ORM Propel, maka syntax di atas dan syntax syntax yang lain nanti akan memakai propel sebagai ORM nya. Setelah perintah di atas di jalankan, buka file config/schema.yml dan lihat apa yang terjadi. File otomatis telah terisi sesuai dengan struktur tabel yang agan buat di database.

Membuat Model

       Model adalah class class yang akan dibuat untuk berinteraksi dengan tabel di database seperti melakukan perintah insert, read, update, delete. Folder model terdapat pada folder lib/model. Untuk membuat model tidak perlu membuat manual satu per satu, tetapi cukup dengan menuliskan syntax berikut pada CMD dan jalankan.

symfony propel:build-model

setelah di jalankan, coba lihat di folder lib/model.Maka otomatis kita mempunyai file model dan file Peer untuk kita sesuai dengan tabel yang ada di database. Dengan file model inilah kita akan berinteraksi dengan tabel tabel di database.

Membuat form

      Udah tahu form kan ? form adalah media kita melakukan input data. Form seperti textfield, textarea,radiobutton dll. Di symfony, kita tidak perlu susah susah membuatnya manual. Bayangkan jika tabelnya ada ratusan, butuh berapa hari untuk membuatnya. Untuk membuat form, cukup jalankan perintah berikut di CMD.

symfony propel:build-form

dan lihat di folder lib/form. Kita sudah mempunyai form sesuai dengan tabel yang ada di database.

Membuat Filter

      Sekarang filter. Apa itu filter ? Filter adalah semacam form pencarian data yang biasanya ada berdampingan dengan tabel. Filter berfungsi untuk form pencarian maupun filter data. Kebayangkan ssahnya nyari data satu per satu di tabel kalo gak ada filter ?. Untuk membuatnya gak perlu susah susah ngoding satu persatu. Cukup jalankan perintah berikut di CMD.
 
symfony propel:build-filter

maka kita sudah mempunyai file filter yang berada di folder lib/filter

Sementara cukup sekian dulu tulisan ini. Kita sambung di lain kesempatan untuk artikel selanjutnya tentang framework symfony 1.4. See You.
Share:

Instalasi Symfony 1.4

      Selamat pagi, lama banget rasanya saya gak nulis di blog ini. Mungkin karena akhir akhir ini lagi sibuk sama berbagai kegiatan jadi belum sempat update tulisan di blog ini. Mumpung kali ini lagi agak longgar, saya mau nambah coretan baru tentang framework php.

     Kenapa framework ? apa ada yang salah dengan php native ? untuk jawaban pertanyaan tersebut saya kira sudah banyak di bahas di blog lain salah satunya di sini. Dan framework php pun ada buanyak banget dan gratis. Ada yang buatan Indonesia sendiri, ada yang dari luar. namun kali ini saya akan membahas tentang symfony versi 1.4 yang kebetulan sedang saya pakai di tempat kerja. Langsung aja Cekidot.

  1. Silahkan download package symfony 1.4 yang saya pakai di sini  atau yang versi asli di sini.
  2. Untuk tutorial instalasi versi asli bisa di lihat di sini 
  3. Extrak file hasil download ke dalam folder webserver agan, contoh saya pakai xampp jadi saya extrak di c:\\xampp\htdocs\
  4. Rename sesuai dengan nama project yang akan agan buat.
  5. Buka cmd dan masuk ke direktori hasil extrak tadi.
  6. kemudian ketik perintah berikut "lib\vendor\symfony\data\bin\symfony generate:project nama_project --orm=Propel" tanpa tanda petik. nama_project adalah nama folder project yang ari hasil extrak file zip tadi. Propel adalah ORM yang di gunakan.
  7. setelah generate selesai, maka struktur folder akan menjadi seperti berikut.
  8. penjelasan struktur folder sebagai berikut.
     
      Di symfony, satu project bisa terdiri dari banyak aplikasi. Contoh: dalam project SIM terdapat aplikasi frontend untuk aplikasi yang bisa dilihat oleh orang umum, aplikasi backend untuk aplikasi manajemen data oleh admin dll. Untuk membuat aplikasi terlebih dahulu harus mengatur file koneksi database. File konfigurasi database terdapat pada  file databases.yml di dalam folder config. Silahkan di configurasi sesuai database anda.

      Sementara cukup sekian tulisan saya kali ini, semoga masih ada kesempatan lain untuk melanjutkan tulisan ini. Sampai jumpa.
Share:

Membuat Modul Di Bonfire

      Melanjutkan tulisan saya sebelumnya tentang bonfire, kali ini saya mau lanjutin tentang membuat modul insert, update, delete. Kalau biasanya yang pernah membuat program CRUD di code igniter, kita pasti membuat controller,model dan view untuk aplikasi CRUD yang kita buat. Namun di bonfire kita dipermudah dengan adanya code builder yang memudahkan kita membuat modul tanpa menulis kode mulai dari Nol. Berikut contohnya.
  1. Masuk ke menu admin aplikasi bonfire anda. Dan klik menu Developer-> Code Builder, kemudian klik new module. Maka akan ada tampilan seperti berikut.
    di atas module name adalah isian untuk nama modul yang akan agan buat, module table adalah tabel untuk modul yang akan agan gunakan di database untuk menyimpan data.Untuk pilihan lebih lanjut bisa klik link toggle advance Option dan klik build the module
  2. Kemudian akan muncul isian tentang jumlah nama,jumlah kolom dan tipe data tabel yang akan digunakan di database dan klik Build the module
  3. Dan bila selesai maka di menu code builder, akan ada modul seperti berikut
    jika sudah,maka di menu content akan ada module yang anda buat tadi lengkap dengan operasi CRUD. Dan silahkan buka di folder application/modul. Maka akan ada folder modul yang anda buat lengkap dengan folder model,view,controller,helper dan folder yang lain yang di butuhkan untuk modul agan.










Naah...bagaimana ?? mudah bukan ?? setelah modul selesai, untuk customize modul bisa agan oprek kode yang ada dengan modal pengetahuan anda tentang Codeigniter. Selamat bereksperimen.
Share:

Instalasi Bonfire V0.7

     Sudah pernah dengar Bonfire ? atau mungkin sudah coba ? kalau belum tahu sama sekali dengan Bonfire, baiknya coba kenalan dulu deh sama bonfire pasti gak bakal nyesel.

      Bonfire adalah sebuah paket aplikasi "siap pakai" yang dibuat dari Framework PHP Codeigniter. Siap pakai di sini bukanlah CMS seperti wordpress atau joomla yang tinggal rubah sedikit dan bisa di upload untuk di onlinekan, tapi sebuah aplikasi yang telah build in dengan user managemen dan disertai dengan code builder yang memudahkan programmer membuat modul modul tanpa menulis kode dari Nol. Namun ketika akan menggunakan bonfire kita harus punya dasar pemrograman Codeigniter yang menjadi core / inti dari bonfire ini. Untuk lebih jelasnya tentang bonfire ini bisa di lihat langsung di situs resminya di http://cibonfire.com/.

     Langsung aja kita praktek instalasi Bonfire.
  1. Download dulu file bonfire di situs resminya. Exsrak dan taruh di direktori web server anda.(Biasanya di htdocs jika menggunakan Xampp).
  2. di sini folder bonfire saya rename menjadi web-profile
  3. Kemudian buat database kosong di database anda (di sini saya menggunakan mysql)

  4. kemudian jalankan di browser dengan menuliskan url http://localhost/nama folder anda, seperti berikut. http://localhost/web-profile/ dan akan tampil sebagai berikut.
  5. setelah itu buka file application/config/database.php dan isi sesuai konfigurasi koneksi ke database yang anda buat tadi
  6. Setelah itu,buka kembali di browser dan ketikkan url sebagai berikut.http://localhost/web-profile/public/index.php/install maka akan muncul tampilan seperti ini.
  7. Kemudian klik next,dan jika langkah anda benar maka akan muncul tampilan seperti ini
  8. Dan jika muncul tampilan sebagai berikut.
  9. Maka copykan file application/config/database.php ke folder application/config/development/ dan refresh halaman anda. Jika sudah berhasil silahkan buka admin area dan login menggunakan user dan password yang disediakan. Dan berikut adalah tampilan menu admin
  10. Jika sudah berhasil,silahkan cek database yang sudah anda buat tadi. dan Beng beng.... kita sudah di buatin tabel tabel buat user management di aplikasi yang kita buat

    Untuk sementara sekian dulu tulisan saya kali ini. Bonfire bisa memudahkan anda dalam proses pembuatan aplikasi berbasis framework php codeigniter. Bonfire menggunakan konsep pemrograman HMVC yang membagi aplikasi ke dalam modul modul yang tiap modul terdapat model-view-controller
Share:

Rewrite URL di Code Igniter

      Agan agan sudah pernah pakai code igniter ?? sudah ngerti url default dari code igniter kan ?? kalo belum saya kasih lihat kayak ini nih...

http://localhost/perpustakaan/index.php/pengarang/get_pengarang
diari url di atas mungkin agan berfikiran untuk membuang index.php dan belum berhasil ?? kali ini saya coba tulis pengalaman saya tentang masalah ini.

      Sebelumnya, saya juga udah muter muter nyoba tutorial yang ada di internet cuma buat ngebuang index.php dari url project saya tapi semua GAGAL. Entah karena saya yang gak lengkap copynya, atau mungkin laptop saya yang kurang update, tapi yang jelas semuanya GAGAL. Dan sampai akhirnya saya nemu satu dan berhasil tapi saya lupa url sumbernya dan untuk itu saya mohon maaf untuk keteledoran saya ini.Langsung aja deh ke TEKAPE.

      Saat saya menulis tulisan ini,saya menggunakan code igniter versi 2.2.0 dan untuk versi yang lain saya tidak memberi garansi. Langkah langkahnya sebagai berikut.
  1. buat file .htaccess di directory utama project code igniter agan sejajar dengan folder application dan system
  2. copykan kode berikut di file .htaccess tadi
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /aplikasi-mangga

    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php/$1 [L]


    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteCond $1 !^(index\.php|images|robots\.txt|css)
    RewriteRule ^(.*)$ index.php/$1 [L]
    </IfModule>

    <IfModule !mod_rewrite.c>

    ErrorDocument 404 /index.php
    </IfModule>
  3. Buka file application/config/config.php dan cari baris $config['base_url'] seperti berikut
    $config['base_url'] = 'http://localhost/aplikasi-mangga/index.php';
    dan buang index.php menjadi  
    $config['base_url'] = 'http://localhost/aplikasi-mangga/';
    dan cari kode berikut 
    $config['index_page'] = 'index.php';
    dan kosongkan menjadi  
    $config['index_page'] = '';
di coba jalankan deh programnya. Kalo masih belum berhasil boleh komen di bawah. Terima kasih.
Share:

Algoritma Pembentukan Bangun Geometri

Umumnya persamaan garis lurus pada koordinat kartesius diwujudkan dalam
persamaan garis : y=m.x+b. Jika dimisalkan pada dua titik(x0,y0 dan x1,y1) akan
dibuat sebuah garis lurus, kita dapat menentukan nilai “m’ dan “b” dengan
persamaan berikut:
m= y1-y0 / x1-x0
b=y1 – m.x1
Algoritma untuk menggambar garis pada komputer didasarkan pada dua
persamaan di atas. dimana m adalah gradien atau kemiringan garis tersebut.

1.Algoritma DDA
             Algoritma digital differential analyzer(DDA), Prinsip algoritma ini adalah mengambil
nilai integer terdekat dengan jalur garis berdasarkan atas sebuah titik yang telah
ditentukan sebelumnya(titik awal garis).
Algoritma pembentukan garis DDA:
1. Tentukan dua titik yang akan dihubungkan dalam pembentukan garis.
2. Tentukan salah satu titik sebagai awal(x_awal,y_awal) dan titik
     akhir(x_akhir,y_akhir).
3. Hitung Dx=x_akhir – x_awal, dan Dy= y_akhir – y_awal.
4. Tentukan langkah, yaitu dengan cara jarak maksimum jumlah penambahan
     nilai x maupun nilai y, dengan cara:
5. Bila nilai absolut dari Dx lebih besar dari absolut Dy, maka langkah= absolut
     dari Dx.
6. Bila tidak maka langkah= absolut dari Dy
7. Hitung penambahan koordinat pixel yaitu x_increment=Dx/langkah,dan y_increment=Dy/langkah
8. Koordinat selanjutnya (x_awal+x_increment, y_awal+y_increment)
9. Gambar pixel di (x_awal, y_awal)
10. Ulangi nomor 8 dan 9 sampai x=x_akhir dan y=y_akhir.



Untuk lebih jelasnya bisa dilihat pada contoh program disini


2.Algoritma Bressenham

       Tidak seperti Algoritma DDA, Algoritma Bressenham tidak membulatkan nilai posisi
pixel setiap waktu. Algoritma Bressenham hanya menggunakan penambahan nilai
integer yang juga dapat diadaptasi untuk menggambar lingkaran.
Berikut ini langkah langkah untuk membentuk garis menurut algoritma Bressenham:
1. Tentukan dua titik yang akan dihubungkan
2. Tentukan salah satu titik sebagai titik awal yaitu (x_awal,y_awal) dan titik
     lainnya sebagai titik akhir(x_akhir,y_akhir).
3. Hitung Dx = x_akhir-x_awal, Dy = y_akhir – y_awal.
4. Hitung parameter = (2Dy) – Dx
5. Jika parameter kurang dari 0, maka parameter = parameter + (2 * Dy).
6. Jika tidak maka y_awal = y_awal +1 dan parameter = parameter + (2 * Dy) –(2 * Dx).
7. Gambar pixel di (x_awal, y_awal)
8. x= x+1
9. Ulangi langkah nomor 5-8 sampai x_awal = x_akhir.

untuk implementasinya bisa di lihat di sini

3.Algoritma Mid Point

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.
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 dan menggunakan CirclePoints untuk menampilkan titik dari seluruh
lingkaran.
Langkah langkah untuk membentuk lingkaran algoritma Midpoint:
1. Tentukan jari-jari dengan titk pusat lingkaran(x_pusat,y_pusat) kemudian diperoleh (x,y)=(0,r)
2. Hitung nilai dari parameter = p = 1-r
3. Gambar pixel pada delapan titik utama, yaitu :
    (x_pusat + x, y_pusat+y)
    (x_pusat – x, y_pusat+y)
    (x_pusat + x, y_pusat-y)
    (x_pusat – x, y_pusat-y)
    (x_pusat + y, y_pusat+x)
    (x_pusat – y, y_pusat+x)
    (x_pusat + y, y_pusat-x)
    (x_pusat – y, y_pusat-x)
    kemudian x = x+1
4. Jika p<0 maka p = p + ( 2x ) + 6
5. Jika tidak maka y = y-1 dan p = p + 2 * ( x-y ) +1
6. Ulangi No. 3 – 5 sampai x = y
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.

sekian dulu ya...kita jumpa lagi di lain kesempatan.Daaaaaahhhhhh.....

Share:

Implementasi Algoritma Bressenham Dengan Java Dan OpenGL

 Selamat siang pemirsa....!!
mau bagi bagi tugas lagi nich,hehehe....
program ini adalah tugas saya di kuliah Pemrograman Komputer Grafis membuat Garis dengan Algoritma Bressenham.Mungkin masih kurang sempurna,tapi lumayan bisa buat referensi teman teman yang mungkin lagi sibuk Ubek ubek google.program ini saya buat pake java netbeans dengan plugin OpenGL.Kalau belum ngerti cara pake OpenGL di Netbeans,bisa dibaca di sini

Langsung saja di simak source programnya


import com.sun.opengl.util.Animator;

import java.awt.Frame;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.media.opengl.GL;

import javax.media.opengl.GLAutoDrawable;

import javax.media.opengl.GLCanvas;

import javax.media.opengl.GLEventListener;

import javax.media.opengl.glu.GLU;



public class Bressenham implements GLEventListener {


public static void main(String[] args) {

Frame frame = new Frame("Bressenham");

GLCanvas canvas = new GLCanvas();


canvas.addGLEventListener(new Bressenham());

frame.add(canvas);

frame.setSize(640, 480);

final Animator animator = new Animator(canvas);

frame.addWindowListener(new WindowAdapter() {


@Override

public void windowClosing(WindowEvent e) {

// Run this on another thread than the AWT event queue to

// make sure the call to Animator.stop() completes before

// exiting

new Thread(new Runnable() {


public void run() {

animator.stop();

System.exit(0);

}

}).start();

}

});

// Center frame

frame.setLocationRelativeTo(null);

frame.setVisible(true);

animator.start();

}


public void init(GLAutoDrawable drawable) {

// Use debug pipeline

// drawable.setGL(new DebugGL(drawable.getGL()));


GL gl = drawable.getGL();

System.err.println("INIT GL IS: " + gl.getClass().getName());


// Enable VSync

gl.setSwapInterval(1);


// Setup the drawing area and shading mode

gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

gl.glShadeModel(GL.GL_SMOOTH); // try setting this to GL_FLAT and see what happens.

}


public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {

GL gl = drawable.getGL();

GLU glu = new GLU();


if (height <= 0) { // avoid a divide by zero error!



height = 1;

}

final float h = (float) width / (float) height;

gl.glViewport(0, 0, width, height);

gl.glMatrixMode(GL.GL_PROJECTION);

gl.glLoadIdentity();

glu.gluPerspective(11000.0f, h, 1.0, 20.0);

gl.glMatrixMode(GL.GL_MODELVIEW);

gl.glLoadIdentity();

}


public void display(GLAutoDrawable drawable) {

GL gl = drawable.getGL();


// Clear the drawing area

gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

// Reset the current matrix to the "identity"

gl.glLoadIdentity();


// Menggambar Garis Putus Putus Bawah

gl.glTranslatef(-1.5f, 0.0f, -6.0f);

gl.glPointSize(12.0f);

int p1x=40;

int p1y=15;

int p2x=45;

int p2y=15;

int dx=Math.abs(p2x-p1x);

int dy=Math.abs(p2y-p1y);

int pk=2*dy-dx;

int k;

for (int x=0;x<10;x++){



for (k=40;k<p2x;k++){

if (pk<=0){

pk=pk+2*dy;

p1x-=1;



gl.glBegin(GL.GL_POINTS);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p1x, p1y-4);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p1x, p1y-25);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p1x, p1y-25-20);

gl.glEnd();

gl.glFlush();

}else {

pk=pk+(2*dy)-(2*dx);

p1x-=1;

p1y-=1;



gl.glBegin(GL.GL_POINTS);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p1x, p1y-4);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p1x, p1y-25);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p1x, p1y-25-20);

gl.glEnd();



gl.glFlush();

}

}

p1x-=10;

} // Menggambar Garis Putus Miring Kanan

int p3x=5;

int p3y=5;

int p4x=10;

int p4y=10;

int dx2=Math.abs(p4x-p3x);

int dy2=Math.abs(p4y-p3y);

int pk2=2*dy2-dx2;

int k2;

gl.glBegin(GL.GL_POINTS);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p3x+2, p3y+2);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p3x+2-10, p3y+2-10);

for (k2=p3x;k2<p4x;k2++){

if (pk2<=0){

pk2=pk2+2*dy2;

p3x-=1;



gl.glBegin(GL.GL_POINTS);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p3x, p3y);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p3x-10, p3y-10);





gl.glEnd();

gl.glFlush();

}else {

pk2=pk2+(2*dy2)-(2*dx2);

p3x-=1;

p3y-=1;



gl.glBegin(GL.GL_POINTS);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p3x, p3y);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p3x-10, p3y-10);







gl.glEnd();

gl.glFlush();

}

}

int p5x=-10;//menggambar garis putus putus miring ke kiri

int p5y=-10;

int p6x=-3;

int p6y=-17;

int dx3=Math.abs(p6x-p5x);

int dy3=Math.abs(p6y-p5y);

int pk3=2*dy3-dx3;

int k3;

gl.glBegin(GL.GL_POINTS);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p5x, p5y);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p6x, p6y);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p6x+9, p6y-9);


for (k3=-7;k3<p6x;k3++){

if (pk3<=0){

pk3=pk3+2*dy3;

p5x+=1;

gl.glBegin(GL.GL_POINTS);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p3x, p3y);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p5x+9, p5y-9);





gl.glEnd();

gl.glFlush();

}else {

pk3=pk3+(2*dy3)-(2*dx3);

p5x+=1;

p5y-=1;

gl.glBegin(GL.GL_POINTS);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p5x, p5y);

gl.glColor3f(1.0f, 0.0f, 0.0f);

gl.glVertex2f(p5x+9, p5y-9);





gl.glEnd();

gl.glFlush();

}

}



}


public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) {

}

}

hehehehe....pusing gak bacanya ?hehehehe....
kalau di running jadinya seperti ini





sekian dulu ya....kita jumpa lagi di lain kesempatan.daaaahhhhhhh..........
Share:
  • ()
  • ()
Show more

Halaman