Algoritma digital differential analyzer (DDA)

BelangTelon | Prinsip algoritma ini adalah mengambil nilai integer terdekat dengan jalur garis berdasarkan atas sebuah titik yang telah ditentukan sebelumnya(titik awal garis).

Keuntungan utama dari DDA atas Differential analog konvensional analyzer adalah presisi yang lebih besar dari hasil dan kurangnya drift / noise / slip / lash dalam perhitungan. presisi ini hanya dibatasi oleh ukuran register dan hasil accumulated rounding, yang mengakibatkan kesalahan pemotongan / penambahan berulang.

Untuk masalah yang dapat dinyatakan sebagai persamaan diferensial, sebuah DDA dapat menyelesaikannya lebih cepat daripada general purpose computer  seperti personal computer (menggunakan teknologi serupa). Namun pemrograman ulang sebuah DDA untuk memecahkan masalah yang berbeda (atau memperbaiki bug) jauh lebih sulit daripada pemrograman pada general purpose computer . Banyak DDA yang dibuat untuk satu masalah saja dan tidak bisa diprogram ulang tanpa mendesain ulang DDA tersebut.

Algoritma pembentukan garis DDA:
1) Tentukan dua titik yang akan dihubungkan dalam pembentukan garis.
2) Tentukan salah satu titik sebagai awal(x0,y0) dan titik akhir(x1,y1).
3) Hitung dx=x1­x0, dan dy= y1­y0.
4) Tentukan langkah, yaitu dengan cara jarak maksimum jumlah penambahan nilai x maupun nilai y, dengan cara :
*Bila nilai absolut dari dx lebih besar dari absolut dy, maka langkah= absolut dari dx.
*­Bila tidak maka langkah= absolut dari dy
5) Hitung penambahan koordinat pixel yaitu x_increment=dx/langkah, dan
y_increment=dy/langkah
6) Koordinat selanjutnya (x+x_increment, y+y_increment)
7) Posisi pixel pada layar ditentukan dengan pembulatan nilai koordinat tersebut.
8) Ulangi nomor 6 dan 7 untuk menentukan posisi pixel selanjutnya,sampai x=x1
dan y=y1.

Dibawah ini adalah contoh souce code penggunaan DDA Line menggunakan Java.
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;
import javax.swing.JFrame;

public class LineDda extends JPanel {
    private int x0, y0, x1, y1;

    public LineDda() {
    }

    public LineDda(int x0, int y0, int x1, int y1) {
        setX0(x0);
        setY0(y0);
        setX1(x1);
        setY1(y1);
    }
   
    public void paintLine (int x0, int y0, int x1, int y1){
        JFrame frame = new JFrame("Line DDA");
        frame.add(new LineDda(x0, y0, x1, y1));
        frame.setSize(250, 200);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);       
    }
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
//        g2d.setColor(Color.blue);
        int dx,dy,steps;
        int xInc,yIncrement,x,y;
        dx= x1-x0;
        dy = y1 - y0;
        if (Math.abs(dx) > Math.abs(dy)){
            steps = Math.abs(dx);
        }
        else{
            steps = Math.abs(dy);   
        }
        xInc = dx / steps;
        yIncrement = dy / steps;
        x = x0;
        y = y0;
        g2d.drawLine(Math.round(x), Math.round(y),Math.round(x),Math.round(y));
        for (int i = 0; i< steps ;i++){
            x += xInc;
            y += yIncrement;
            g2d.drawLine(Math.round(x), Math.round(y),Math.round(x),Math.round(y));
        }
       
    }

    public int getX0() {
        return x0;
    }

    public void setX0(int x0) {
        this.x0 = x0;
    }

    public int getY0() {
        return y0;
    }

    public void setY0(int y0) {
        this.y0 = y0;
    }

    public int getX1() {
        return x1;
    }

    public void setX1(int x1) {
        this.x1 = x1;
    }

    public int getY1() {
        return y1;
    }

    public void setY1(int y1) {
        this.y1 = y1;
    }

}

Jika ingin mendapatkan file lengkapnya, silakan download disini

1 comment:

  1. Informasi yang sangat bermanfaat. kunjungi website kami di Kabar UMJ

    ReplyDelete