DDA Bresenham Mari Cuba Latihan


Contoh dan Penyelesaian dengan algoritma Bresenham

                 

1. Inputkan 2 titik hujung garis lurus (X 0,Y 0)dan (X n,Y n). katakan titik tersebut ialah (2,2) dan (6,4)

 

                         

 

2. Plotkan titik awal iaitu (X0,Y 0)

 

        

 

3. Kemudian kira pemalar-pemalar berikut :

 

                                        

 

4. Seterusnya cari nilai pemalar penentu berpandukan nilai pemalar diatas

 

                                            

 

5. Pada setiap kedudukan persampelan Xk(di sepanjang laluan garis lurus) bermula daripada k=0, uji nilai pemalar tertentu                                  

  • Jika Pk<0, Plotkan titik (Xk+1,Y k)   
              Pk+1 = Pk + 2 deltay

                                           
  • Jika Pk>0, Plotkan titik (Xk+1,Y k+1)   
              Pk+1 = Pk + 2 deltay - 2 deltax
  •  


     


     


     

    6. Ulang langkah 5 sebanyak kali. Hasilkan boleh dilihat melalui jadual berikut :

     

       

     



    Bahagian Pengaturcaraan

    Berikut adalah contoh keratan aturcara bagi membangunkan garisan menggunakan algoritma Bresenham

    Public void lineBresenham (int x0, int y0, int x1, int y1, Color color)  {
          int pix = color.getRGB();
          int dy = y1 - y0;
          int dx = x1 - x0;
           int stepx, stepy;
          if ( dy < 0 ) { dy = -dy; stepy = -1; } else { stepy = 1 }

           if ( dx < 0 ) { dx = -dx; stepx = -1; } else { stepx = 1 }             

           dy <<= 1;                                                      // dy is now 2 * dy
           dx <<= 1;                                                      // dx is now 2 * dx
           raster.setPixel (pix, x0, y0 );     
          if ( dx > dy ) {    
                int fraction = dy - ( dx >> 1);                      // same as 2 * dy - dy
                 While ( x0 != x1 )<

                       if (fraction >= 0) {

                           y0 += stepy;
                           fraction -= dx;                                // same as fraction -+ 2*dx
                      }
                      x0 += stepx;
                      fraction += dy;                                 // same as fraction -= 2*dy
                      raster setPixel(pix, x0, y0);
           }
       else   {
                 int fraction = dx - ( dy >> 1 );
                 while ( y0 != y1) {
                       if ( fraction > = 0 ) {
                            x0 += stepx;
                            fraction -= dy;
                        y0 +=stepy
                        fraction += dx;
                        raster setPixel(pix, x0, y0);
                  }
            }
    }