Minggu, 30 Oktober 2016

Algoritma Bresenham

Algoritma garis Bresenhem adalah algoritma konversi penambahan nilai integer.
Langkah-langkah untuk membentuk garis menurut algoritma ini adalah :

1. Menentukan titik awal & akhir
2. Pengubahan posisi
3. Perulangan

1. Menentukan titik awal & akhir
   - Titik awal (x1,y1)
   - Titik akhir (x2,y2)

2. Pengubahan posisi

    - Tentukan dx & dy
      dx = x2 - x1
      dy = y2 - y1

    - Tentukan p awal
      p = (2*dy)-dx

 3. Perulangan

    - Kondisi
      Jika p > 0 maka, x = x + 1, y = y, dan nilai p berubah dengan p = p + (2*dy)
      Jika tidak, maka x = x + 1, y = y +1 dan nilai p berubah dengan p p + 2(dy - dx)

Contoh code:

//Nama File : Bresenham.java



import java.awt.*;
import javax.swing.*;

public class Bresenham {
    public static void main(String[] args) {
        // TODO code application logic here
        
        //Membuat Frame baru dengan nama Frame "Frame"
        JFrame Frame = new JFrame("Algoritma Garis Bresenham");
        Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        //Membuat Garis Baru dengan nama variabel "GambarGaris"
        Garis GambarGaris = new Garis ();
        GambarGaris.setx1 (10);
        GambarGaris.sety1 (10);
        GambarGaris.setx2 (500);
        GambarGaris.sety2 (300);
        
        // Setting Frame dengan input GambarGaris
        Frame.add(GambarGaris);
        Frame.setSize(600,480);
        Frame.setVisible(true);
    }
    
}

// Nama File : Garis.java
// Algoritma Garis

package bresenham;

//Mengimport Class
import java.awt.*;
import javax.swing.*;

//Membuat Garis.java
public class Garis extends JPanel{
    private int x1,y1,x2,y2;
    
    public int getx1() {
        return x1;
    }
    
    public int getx2() {
        return x2;
    }
    
    public int gety1() {
        return y1;
    }
    
    public int gety2() {
        return y2;
    }
    
    public void setx1(int xa) {
        x1 = xa;
    }
    
    public void sety1(int ya) {
        y1 = ya;
    }
    
    public void setx2(int xb) {
        x2 = xb;
    }
    
    public void sety2(int yb) {
        y2 = yb;
    }
    
    //Metoda paint (Superclass)
    public void paint(Graphics Garis) {
        int xEnd,i,x,y,
            dx = Math.abs(x2-x1),
            dy = Math.abs(y2-y1),
            p = (2*dy)-dx;
        
        if (x1>x2) {
            x = x2;
            y = y2;
            xEnd = x1;
        } else {
            x = x1;
            y = y1;
            xEnd = x2;
        }
        
        //Memanggil metoda paint dari superclass + ubah warna
        super.paint(Garis);
        this.setBackground(Color.BLACK);
        Garis.setColor(Color.GREEN);

        //Membuat garis menggunakan perulangan drawRect
        Garis.drawRect(x, y, 1, 1);
        while(x<xEnd) {
            x++;
            if(p<0) {
                p = p + (2*dy);
            } else {
                if (y1>y2) {
                    y--; } 
                    else y++;
                p = p + 2*(dy - dx);
            }
            Garis.drawRect(x, y, 1, 1);
        }
    }
}

Hasil penghitungan algoritma :


2 komentar: