Just another Blogdetik.com weblog

BAB-4

LINGKARAN dan ELIPS

Pada materi kali ini kita akan membahas tentang algoritma pembentuk lingkaran dan elips

4.1. LINGKARAN

Algoritma bressenham dapat diterapkan untuk menggambar sebuah lingkaran. Untuk menggambar lingkaran hanya diperlukan menggambar titik-titik pada oktan pertama saja sedangkan titik-titik pada kuadran lain dapat diperolah dengan mencerminkan titik-titik pada kuadran pertama.

Dapat disimpulkan bahwa jika algoritma bresenham bekerja mulai dari (x=0, y=R) searah jarum jam, maka y merupakan fungsi menurun dari x, demikian juga sebaliknya, jika dimulai dari (y=0, x=R) maka x akan merupakan fungsi menurun dari y.  

1.        Masukkan jari-jari dan pusat lingkaran (xc,yc) dan dapatkan titik permulaan pada keliling yang berpusat pada titik awal sebagai:(x0 , y0) = (0,r) 

2.        Hitung nilai awal parameter keputusan sebagaiP0 = 5/4 – r 

3.        Pada masing-masing posisi xk, mulai dari k=0, lakukan tes berikut jika pk <0, titik berikut sepanjang lingkaran yang berpusat (0,0) adalah (xk+1,yk) dan  selain itu, titik berikutnya untuk lingkaran adalah (xk + 1, yk – 1) dan dengan 2xk+1 = 2xk+2 dan 2yk+1 = 2yk – 2 

4.        Tentukan titik simetri untuk 7 oktan yang lain. 

5.        Pindahkan masing-masing posisi piksel (x,y) ke bagian lingkaran yang berpusat ke (xc,yc) dan lukis nilai koordinat. 

6.        Ulangi langkah 3 sampai 5 hingga x>= y.

MIDPOINT

Algoritma midpoint disebut juga algoritma lingkaran Bresenham. Algoritma ini hanya memperhatikan bagian 45 drajat dari suatu lingkaran.

Algoritma Lingkaran Midpoint

Void CircleMidPoint(int Xcenter, int Ycenter, int Radius)

{               

X = 0;               

Y = Radius;               

P = 1-Radius;               

While (X<Y)

{                               

X = X+1;

If (P < 0 )

P = P+ 2*X+1;

Else {                                               

Y = Y-1;                                               

P = P + 2*(X-Y)+1;                                       

}                               

}               

CirclePlotPoints();

}               

Void CirclePoints(Int X, Int Y, Int Value)

{               

SetPixel(X,Y, Value);               

SetPixel(-X,Y, Value);               

SetPixel(X,-Y, Value);               

SetPixel(-X,-Y, Value);               

SetPixel(Y,X, Value);               

SetPixel(-Y,X, Value);               

SetPixel(Y,-X, Value);               

SetPixel(-Y,-X, Value);

}

LATIHAN       

Diketahui titik pusat lingkaran (0,0) dan radius 8, perhitungan berdasarkan oktan dari kuadran pertama dimana x = 0 sampai y = 0. Nilai parameter dapat ditentukan dengan.

P0  = 1 – r      

      = 1 – 8

     = -7

Koordinat titik awal adalah (x,r) = (0,8)

Jawab:

X = 0                                     

Y = r  = 8

————————————————————–

K=0

P = 1 – r   = 1 – 8 = -7 

Loop ke-1

x = x +1                                   y tetap = 8  

   = 0 +1 = 1

—————————————————————

K=1

P = P + 2 * X + 1   

    = -7 + 2 * 1 + 1    

    = -4      

Loop ke-2

x = x +1                                   y tetap = 8  

   = 1 +1 = 2

—————————————————————

K=2

P = P + 2 * X + 1   

   = -4 + 2 * 2 + 1    

   = 1 

Loop ke-3

x = x +1                                   y = y-1  

  = 2 +1 = 3                              = 8-1 = 7

—————————————————————

K=3

P = P + 2 * (X –Y) +1   

   = 1 + 2 * (3 – 7) + 1    

   = -6 

Loop ke-4

x = x +1                                   y tetap = 7  

   = 3 +1 = 4

—————————————————————

K=4

P = P + 2 * X + 1   

   = -6 + 2 * 4 + 1    

   = 3 

Loop ke-5

x = x +1                                   y = y-1   

  = 4 +1 = 5                               = 7-1 = 6

—————————————————————

K=5

P = P + 2 * (X - Y) + 1   

   = 3 + 2 *(5 - 6) + 1    

   = 2 

Loop ke-6

x = x +1                                   y = y-1  

   = 5 +1 = 6                              = 6-2 = 5

—————————————————————

K=6

P = P + 2 * (X - Y) + 1   

   = 2 + 2 *(6 - 5) + 1    

   = 5                        

Loop berhenti karena x > y

Nilai dari penelusuran algoritma di tuliskan dalam tabel berikut:

K Pk (xk+1,yk+1) oktan 1
- - ( 0,8 )
0 -7 ( 1,8 )
1 -4 ( 2,8 )
2 1 ( 3,7 )
3 -6 ( 4,7 )
4 3 ( 5,6 )
5 2 ( 6,5 )

4.2. ELIPS

Dengan sedikit memodifikasi algoritma lingkaran midpoint maka kita dapat membuat sebuah elips, dengan memasukkan nilai mayor dan nilai minor axis pada prosedur lingkaran.

Algoritma Elips Midpoint

Dalam membuat elips midpoint pendekaan yang dilakukan sama dengan menampilkan lingkaran. Metode elips dengan midpoint dijalanklan pada kuadran pertama. Bagian pertama berdasarkan kemiringan elips rx < ry. Bila slope < 1 maka penambahan steps pada arah sumbu x, dan bila kemiringan > 1 maka unit steps menurut sumbu y. Bagian 1 dan 2 dapat menggunakan bermacam cara, pertama dimulai dari posisi (0,ry) dan steps searah jarum jam sepanjang jalur elips. Pergerakan unit steps dalam x pada saat steps > 1.

Void ElipsMidPoint(Int xCenter,int yCenter,int Ex,int Ry,int P)

{      int Rx2 = Rx*Rx;          int Ry2 = Ry*Ry;    

     int twoRx2 = 2*Rx2; 

     int TwoRy2 = 2*Ry2;

     x = 0;              

     y = Ry;Int px = 0;         

     int py = twoRx2 * y; 

    //Bagian 1

    P = Round(Ry2 – (Rx2 * Ry) + (0.25 * Rx2));

    ElipsPlotPoints();

   While (px < py )

   {    

           X ++;    

           Px += twoRy2;          

           If (p<0)          

                    P +=Ry2 + px;          

          Else

               {               

                      y- -;               

                     py - = twoRx2;               

                     p += Ry2 + px – py;          

               }    

              elipsPlotPoints();    

   }

}

//Bagian

2P = round(Ry2*(x+0.5)*(x+0.5)+Rx2*(y-1)*(y-1)– Rx2*Ry2);

While (y>0)

{    

       Y- -;     

       Py - =twoRx2;

       If  (p>0)          

             P + = Rx2 – py;    

       Else

          {          

                 X++;          

                 Px += twoRy2;          

                 P += Ry2 + px – py;          

          }

          ElipsPlotPoints();

    }

}

 Void ElipsPlotPoints()

{    

       //Prosedur untuk menuliskan piksel    

       SetPixel(Xcenter + X, yCenter + Y);    

       SetPixel(Xcenter - X, yCenter + Y);    

       SetPixel(Xcenter + X, yCenter - Y);    

       SetPixel(Xcenter - X, yCenter - Y);

}

Latihan Elips

Diketahui titik pusat elips (0,0) dan mayor axis rx = 6, serta minor axis ry = 8, perhitungan berdasarkan pada kuadran pertama sebagai berikut. Nilai parameter dapat ditentukan. Koordinat titik awal adalah (x,r) = (0,8)

Dengan menggunakan algoritma elips maka hasilnya seperti pada tabel berikut:

K Pk ( xk+1, yk+1 )
- - ( 0,8 )
0 -215 ( 1,8 )
1 -23 ( 2,8 )
2 297 ( 3,7 )
3 241 ( 4,6 )
4 -108 ( 5,5 )
5 236 ( 5,4 )
6 -16 ( 6,3 )
7 600 ( 6,2 )
8 492 ( 6,1 )
9 456 ( 6,0 )

Desember 14th, 2008 at 03:01 | Comments & Trackbacks (3) | Permalink

Ramalan bintang ini saya kutip dari situs: http://kalenderbali.org/index.php?bulan=2&tanggal=1&tahun=1927

Ramalan Bintang (Capricorn)
Berwatak suka dengan kebesaran, kekuasaan, dan memerintah. Anda seorang genius, pandai dan berpandangan luas. Harus ulet  dalam melaksanakan tujuan untuk mencapai cita-cita yang tinggi dan mulia itu. Pasangannya Taurus dan Virgo.

Ramalan Bintang (Aquarius)
Berwatak jujur, kata-katanya bisa dipercaya, patut dijadikan sahabat tauladan. Untuk mencapai cita-cita yang luhur, anda harus rajin, ramah dan ringan tangan. Pasangannya Gemini, Libra.

 Ramalan Bintang (Pisces)
Berwatak ramah dan tidak egoistis, namun kadang-kadang dalam hati nuraninya timbul pertentangan. Untuk mengejar kemajuan yang pesat anda harus cepat mengambil keputusan yang seimbang. Pasangannya Canser dan Scorpio.

Ramalan Bintang (Aries)
Berwatak kuat kepribadiannya serta pikirannya cerdas. Bisa menjadi sahabat yang baik dan setia. Untuk dapat mencapai tujuan yang luhur dan maksud yang mulia itu, harus berusaha dengan sungguh-sungguh dan rajin. Pasangannya Leo dan Sagitarius. 

Ramalan Bintang (Taurus)
Berwatak agak keras kepala, jalan pikirannya sering bercabang, tetapi pandai bergaul serta bersifat jujur
terhadap sahabatnya. Agar sukses dalam kehidupan, harus berpendirian tetap dan berpandangan luas. Pasangannya Virgo dan Capricorn.

Ramalan Bintang (Gemini)
Berwatak gemar sekali dengan keindahan, namun tujuan hidupnya kadang-kadang tidak tetap. Oleh sebab itu anda harus memantapkan tujuan serta maksud hidup anda dengan membiasakan berlaku sabar tanpa dibayangi rasa bosan. Pasangannya Libra, Aquarius, dan Sagitarius.

Ramalan Bintang (Cancer)
Berwatak teguh mantap dalam pendirian maupun sikapnya. Suka berlaku hati-hati. Agar lebih maju anda harus memperluas cakrawala pergaulan dalam masyarakat. Anda sangat peka, tidak mudah melupakan segala peristiwa. Pasangannya Scorpio dan Pisces.

Ramalan Bintang (Leo)
Berwatak lebih bersifat emosional dibandingkan menggunakan pikiran sehingga seringkali terlibat problim percintaan. Anda harus berpikir lebih dahulu sebelum bertindak agar kehidupan bertambah cemerlang. Pasangannya Aries, Sagitarius, dan Aquarius.

Ramalan Bintang (Virgo)
Berwatak agak kurang merasa kasihan. Pembawaannya cerewet tetapi senang dengan hal-hal yang bersifat penyelidikan. Harus lebih banyak mengasihani agar dalam pergaulan merasa gembira. Pasangannya Libra, Scorpio, dan Capricorn.

 Ramalan Bintang (Libra)
Berwatak mudah bergaul, ramah dan cinta perdamaian. Namun sangat gemar berfoya-foya. Anda harus memilih pekerjaan yang cocok dengan hobby anda supaya kehidupan anda benar-benar bermanfaat lahir batin. Pasangannya Aries, Aquarius, dan Gemini.

Ramalan Bintang (Scorpio)
Berwatak memiliki kepribadian yang berpengaruh. Dalam kehidupan bisa memiliki tingkat yang paling tinggi, namun bisa pula jatuh ke tempat yang paling rendah. Gemar urusan sosial, ulet, dan rajin. Pasangannya Pisces, Canser, dan Virgo.

Kalo ada ramalan bintangnya yang kurang, berati emang segitu aja…..

Nopember 7th, 2008 at 11:27 | Comments & Trackbacks (3) | Permalink

PEMANASAN GLOBAL Vs BUDAYA LOKAL

Pemanasan Global merupakan ulah manusia yang tidak memperhatikan keseimbangan alam, sehingga berakibat pada rusaknya tatanan lingkungan dan alam semesta ini. Apabila kita memperhatikan kearipan nilai-nilai yang diwariskan oleh leluhur kita niscaya pemanasan global ini dapat kita tunda atau dapat kita hindari. Adapun dalam tulisan saya ini ingin menyampaikan bahwa kearipan budaya lokal tidak selalu usang oleh jaman. Namun masih relevan dan masih memiliki nilai-nilai yang luhur.

Kearipan nilai-nilai budaya ini masih sangat terasa dan masih ada sampai saat ini di BALI. Sehingga BALI menjadi tuan rumah konfrensi mengani pemanasan global. BALI menarwarkan konsep TRI HITA KARANA. Tri Hita Karana merupakan nilai-nilai yang luhur yang diwariskan oleh pendahulu kita yang diwariskan ke anak cucunya supaya bisa menjaga keseimbangan alam ini. Adapun Nilai-nilai Tri Hita Karana itu adalah:

1. Menghormati TUHAN. Dengan menghormati Tuhan maka kita tidak bertindak sewenang-wenang, kita selalu ingat akan kebesaran Tuhan karena Tuhan ada dimana-mana, menenpati semua tempat, tak ada tempat yang tak ditempatinya. Sehingga kita harus selalu ingat bahawasanya Tuhan selalu melihat tindak tanduku kita.

2. Menghormati SESAMA, sesama disini sesama ciptaan Tuhan. Kita didunia ini sama-sama ciptaan Tuhan harus saling menghargai satu sama lain, tanpa membdakan Ras, Suka, Bangsa, dan Agama. Sehingga konsep ini dikenal dengan Tat Twam Asi (Aku adalan kamu, Kamu adalah aku) artinya aku dan kamu berasal dari pencipta yang sama. Bahkan disini juga berlaku Bhina Tunggal Ika Tan Hana Dharma Mangurua (Berbeda-beda tetapi tetap satu tidak ada kebenaran yang mendua).

3. Menghormati LINGKUNGAN (Alam Semesta), kita harus menghormati lingkungan atau alam semesta, bila kita tidak menghormati alam maka alampun akan marah dan membinasakan kita. Kadang kita tidak pernah memperlakukan alam dengan alami. Kita kadang tamak dan  dan rakus memperlakukan alam. Seperti menebang kayu dengan semena-mena, mengeksploitasi kekayaan alam dengan seenaknya. akibatnya alam tidak seimbang alias sakit. Dibali menghargai alam ini diwujudkan dengan Tumpek Uduh (menghormati alam yang produktif). Bila kita memiliki kebun atau pohon-pohon yang produktif orang-orang bali memberikan penghormatan kadang berupa sesajen. Pemberian sesajen disini bukan menyembah pohon tetapi rasa hormat pada pohon alam yang telah memberikan keseimbangan alam. Bukan saja pohon atau alam yang dihormati pada saat acara Tumpek Uduh tersebut tetapi sesuatu yang memberikan penghasilan atau nilai manfaat pada manusia. Seperti tukang ojek bila motornya sebagai sumber mata pencaharian maka saat itu diberikan rasa penghormatan pada motor, atau ada tukang bangunan dimana perkakasnya berupa kampak, gergaji, pahat, dll, pada saat upacara tumpek uduh akan diberikan penghormatan.

Dengan konsep Tri Hita Karana orang bali menjaga kelestarian alam dan lingkungan sehingga bisa hidup selaras dengan alam yang selalu bertawakal pada Tuhan Yang Maha Esa.

Nopember 6th, 2008 at 17:08 | Comments & Trackbacks (0) | Permalink

BAB-3

ATRIBUT PRIMITIF 2D

Yang termasuk dalam atribut primitive adalah titik dan garis. Pembetuk garis yang dikenal adalah algoritma DDA, dan Bresenham.

Oleh : I Gusti Ngurah Suryantara,S.Kom., M.Kom  

3.1. PENDAHULUAN

Yang merupakan atribut primitif adalah: titik dan garis. Ada beberapa metode pembentuk garis yang umum digunakan yaitu:Algoritma DDA (Digital Defferential Analyzer) dan Algoritma Bressenham 

3.1.1. DDA (Digital Defferential Analyzer)

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.

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 

DDA (bahasa pascal)Procedure DDA;

Begin  

       Write(‘Masukkan Nilai X0 : ‘);         

       Readln(X0);   Write(‘Masukkan Nilai Y0 : ‘);         

       Readln(Y0);   Write(‘Masukkan Nilai X1 : ‘);         

       Readln(X1);   Write(‘Masukkan Nilai Y1 : ‘);         

       Readln(Y1);           

       Dx:= X1-X0;           

       Dy:= Y1-Y0;           

       If Abs(Dx) > Abs(Dy) Then                       

              Steps:= Abs(Dx)           

       Else                       

             Steps:= Abs(Dy);           

      Endif           

      PutPixel(x,y,Hitam);           

      For x = 1 to Steps Do                        

            X := X + Xincrement;                       

            Y := Y + Yincrement;                       

            PutPixel(x,y,Hitam);           

    End;

End;

Contoh

Diketahui 2 buah titik A(10,10) dan titik B(17,16), bila titik A sebagai titik awal dan titik B sebagai titik akhir maka buatlah garis yang menghubungkan titik tersebut dengan menggunakan algoritma DDA.

Jawab

Titik Awal = A(10,10)

Titik Akhir = B(17,16)

Dx =     (X1-X0)             (17-10) = 7     

Dy =     (Y1-Y0)            (16-10) = 6

Abs(Dx) = Abs(7) = 7

Abs(Dy) = Abs(6) = 6

Abs(Dx) > Abs(Dy) maka

Step = Abs(Dx) = 7

Xincrement = Dx / Steps.  7 / 7 = 1

Yincrement  = Dy / Steps. 6 / 7 = 0,86 

Tabel 3.1. Nilai perhitungan

K

X Y Xinc Yinc
- - - 10 10
0 11 10,86 11 11
1 12 11,71 12 12
2 13 12,57 13 13
3 14 13,43 14 14
4 15 14,28 15 15
5 16 15,14 16 16
6 17 16 17 16

 3.1.2.BRESSENHAMALGORITMA 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, maka titik selanjutnya adalah (xk+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.  

Sub Rutim Berssenham dalam CVoid line (int xa, ya, xb, yb, xEnd; flot x,y)

{           

          Int dx = abs(xb-xa), dy=abs(yb-ya);           

          Int p = 2*dy-dx;

          Int twoDy = 2*dy,

          twodyDx = 2*(dy-dx);

          If (xa>xb)

         { 

                      X = xb;           

                     Y = yb;           

                     Xend = xa;

                }

        Else

           {           

                  X = xa;           

                  Y = ya;                            

                  xEnd = xb;

           }

                  SetPixel(x,y);

                  While (x<xEnd)

                  {           

                           X++;           

                    If (p<0)                       

                           P+ = twody;           

                    Else

                            {                       

                                 Y++;                       

                                 P+ = twoDyDx;           

                           }           

                          SetPixel(x,y);

                    }

           }; 

Contoh

Berdasarkan contoh pada algoritma DDA buatlah dengan metode bresenham. 

JAWAB     

dx  = abs(xb – xa)= abs(17 – 10 ) = 7     

dy  = abs(yb – ya)= abs(16 – 10) = 6      

p   = 2 * dy - dx             = 2 * 6 – 7 = 5 

twody = 2 * dy            = 2 * 6 = 12  

twodydx= 2 * (dy – dx )            = 2 * ( 6 – 7 ) = -2

Periksa xa dan xb          

xa = 10 < xb = 17Maka 

x         = xa            = 10 

y         = ya            = 10

Xend    = xa            = 17 

Ulangi selama x < xend

K0:    x = x + 1                =  10 + 1 = 11           

Periksa nilai p , dimana p = 5        

y  = y + 1             = 10 + 1 = 11          

p = p + twodydx             = 5 + (-2) = 3       

K1: x    = x + 1            = 11 + 1 = 12 

Periksa nilai p, dimana p = 3         

y = y +1               = 11 + 1 = 12          

p = p + twodydx               = 3 + (-2) = 1 

K2:   x = x + 1              = 12 + 1 = 13 

Periksa nilai p, dimana p = 1         

y = y +1              = 12 + 1 = 13          

p = p + twodydx              = 1 + (-2) = -1 

K3:   x = x + 1              = 13 + 1 = 14 

Periksa nilai p, dimana p = -1          Nilai y tetap yaitu y=13          

p = p + twody               = (-1) + 12 = 11 

K4:   x = x + 1              = 14 + 1 = 15 

Periksa nilai p, dimana p = 11         

y = y +1               = 13 + 1 = 14          

p = p + twodydx              = 11 + (-2) = 9 

K5:   x = x + 1              = 15 + 1 = 16 

Periksa nilai p, dimana p = 9         

y = y +1              = 14 + 1 = 15          

p = p + twodydx              = 9 + (-2) = 7         

K6:   x = x + 1              = 16 + 1 = 17 

Periksa nilai p, dimana p = 7          y = y +1              = 15 + 1 = 16          

p = p + twodydx              = 7 + (-2) = 5 

Proses berhenti karena x = x1 dan y = y1

Masukkan nilai kedalam tabel, seperti pada tabel 3.2. Tabel 3.2.

Hasil penelusuran dengan bressenham

K

Pk (Xk+1 , Yk+1)
- - 10,10
0 3 11,11
1 1 12,12
2 -1 13,13
3 11 14,13
4 9 15,14
5 7 16,15
6 5 17,16

 LatihanDiketahui 2 buah titik yaitu, A(25,27) dan B(20,17), buatlah garis dengan menggunakan algoritma DDA dan Bressenham.

Nopember 3rd, 2008 at 15:09 | Comments & Trackbacks (5) | Permalink