Minggu, 30 Oktober 2016

Algoritma DDA

Apa itu Algoritma DDA ?

        Algoritma DDA (Digital Differential Analyzer) adalah algoritma pembentukan garis berdasarkan perhitungan Dx dan Dy,yaitu pembuatan garis dengan langkah umum sebagai berikut ;

1. Tentukan Titik Awal dan Akhir
    Titik Awal    (x1,y1)  
    Titik Akhir   (x2,y2)




2. Pengubahan Posisi (steps)
    Jika Dx > DY maka steps  = DX
    Jika tidak maka steps  = DY
    Dx = X2 - X1
    Dy = Y2 - Y1
    Perubahan nilai X (X_inc) = Dx/steps =
    Perubahan nilai Y (Y_inc) = Dy/steps =

3. Perulangan (ubah posisi dan gambar)
    X = X + X_inc =
    Y = Y + Y_inc =

Contoh Codingan Sebagai Berikut :

Main.java
package bresenham;
import java.awt.*;
import javax.swing.*;
/**
 *
 * @author ardianagus
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public Main() {
        
    }
    
    public static void main(String[] args) {
        // TODO code application logic here
        JFrame frame = new JFrame("algoritma garis bresenham");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        garis grs = new garis();
        
        grs.setx1(270);
        grs.sety1(260);
        grs.setx0(10);
        grs.sety0(10);
    
        
        
        frame.add(grs);
        frame.setSize(720,480);
        frame.setVisible(true);
        
    }

}
garis.java

package bresenham;
import java.awt.*;
import javax.swing.*;
/**
 *
 * @author CHHANNZ
 */
public class garis extends JPanel{
    private int x0,y0,x1,y1;
    
    public int getx0() {
        return x0;
    }
    
    public int getx1() {
        return x1;
    }
    
    public int gety0() {
        return y0;
    }
    
    public int gety1() {
        return y1;
    }
    
    public void setx0(int xa) {
        x0 = xa;
    }
    
    public void sety0(int ya) {
        y0 = ya;
    }
    
    public void setx1(int xb) {
        x1 = xb;
    }
    
    public void sety1(int yb) {
        y1 = yb;
    }
    
    public void paint(Graphics g) {
        int x,y,xend;
        
        int dx = Math.abs(x1-x0);
        int dy = Math.abs(y1-y0);
        
        super.paint(g);
        this.setBackground(Color.WHITE);
        g.setColor(Color.RED);
        
        int p = 2*dy-dx;
        int duady = 2*dy;
        int duadydx = 2*(dy-dx);
        if (x0>x1) {
            x = x1;
            y = y1;
            xend = x0;
        } else {
            x = x0;
            y = y0;
            xend = x1;
        }
        
       
        g.drawRect(x, y, 1, 1);
        while(x<xend) {
            x++;
            if(p<0) {
                p+=duady;
            } else {
                if (y0>y1) {
                    y--; } else y++;
                p+=duadydx;
            }
            g.drawRect(x, y, 1, 1);
        }
    }
    
    public garis() {
        
    }
        
}


Hasil Jadi Program


Tidak ada komentar:

Posting Komentar