Minggu, 30 Oktober 2016

Algoritma Garis DDA

Apa itu algoritma DDA? DDA (Digital Differential Analyzer) adalah algoritma pembentukan garis berdasarkan perhitungan Dx dan Dy, Langkah-langkah pembuatan algoritma DDA yaitu:

1. Menentukan titik awal & akhir
2. Pengubahan posisi (menggunakan steps)
3. Perulangan

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

2. Pengubahan posisi (step)

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

   - Menentukan steps
     Jika dx > dy, maka steps = dx, dan jika dy => dx maka steps = dy

   - Menentukan perubahan nilai
      x_inc  = dx / steps
      y_inc = dy / steps

3. Perulangan
 
   - Perulangan akan berhenti jika perulangan sampai ke titik akhir
 
   - Rumus perulangan
     x = x + x_inc
     y = y + y_inc


Contoh code:

// Nama File : DDA.java



public class DDA {
    public static void main(String[] args) {
        // TODO code application logic here
     
        //Membuat Frame baru untuk menampilkan garis
        JFrame Frame = new JFrame ("Algoritma Garis DDA");
        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 (125);
        GambarGaris.sety2 (125);

        // Setting Frame dengan input GambarGaris
        Frame.add(GambarGaris);
        Frame.setSize(600,480);
        Frame.setVisible(true);
    }


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

package dda;

//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 setx2(int xb) {
        x2 = xb;
    }
 
    public void sety1(int ya) {
        y1 = ya;
    }
 
    public void sety2(int yb) {
        y2 = yb;
    }
 
    //Metoda paint (Superclass)
    public void paint(Graphics Grs) {
        int dx = x2-x1,
            dy = y2-y1,
            steps,p;

        float x=x1,
              y=y1,
              x_inc,
              y_inc;
     
        //Memanggil metoda paint dari superclass + ubah warna
        super.paint(Grs);
        this.setBackground(Color.BLACK);
        Grs.setColor(Color.GREEN);

        //Menentukan steps melalui penghitungan dx dan dy
        if(Math.abs(dx)>Math.abs(dy))
        {
            steps = Math.abs(dx);
        }
        else steps = Math.abs(dy);

        //Menentukan x & y increment
        x_inc = dx/(float)steps;
        y_inc = dy/(float)steps;

        //Membuat garis menggunakan perulangan drawRect
        Grs.drawRect(Math.round(x), Math.round(y), 1, 1);
        for(p=0;p<steps;p++) {
            x+=x_inc;
            y+=y_inc;
            Grs.drawRect(Math.round(x), Math.round(y), 1, 1);
        }      
    }
}

Hasil penghitungan algoritma :



Tidak ada komentar:

Posting Komentar