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

Deret fibonacii dengan sisipan kata

Pada posting kali ini membahas sebuah source code dari C++ yang akan menampilkan sebuah deret fibonacci dengan sisipan sebuah kata. Banyak deret dan posisi dimana sisipan tersebut diletakkan pada deret ditentukan oleh user berupa inputan angka. Pada program ini kata yang menjadi sisipan sudah ditentukan didalam source code. Tetapi jika ingin membuat kata tersebut menjadi sebuat inputan dati user, maka harus melakukan modifikasi dengan mengganti kata yang akan dicetak menjadi sebuah variabel string. 

Tampilan program yang sudah dijalankan akan seperti dibawah ini :


Flowchart dari program tersebut :

Berikut adalah source code C++ untuk tampilan program tersebut :

#include
#include
 

int main(){
       int n,m;
       int a=0;
       int b=1;
       int c; 

       cout<<"masukkan banyak deret : ";
       cin&>>n;
       cout<<"batas sisipan : ";
       cin>>m;
        cout<<b<<" ";
       
for (int i=1;i
            c=a+b;
                 if((i+1)%m==0){
                     cout<<"abu ";
                 }else{
                cout<<<" ";
                 }
            a=b;
            b=c;
        }
        cout<
   getch();
}    

Segitiga Pascal Angka C++

Belang Telon | Dibawah ini adalah souce code C++ untuk menampilkan segitiga pascal dengan batas merupakan masukan dari user dan komponen segitiga tersebut berupa angka yang membentuk sebuah piramida seperti dibawah ini.




Source Code


#include
#include
int main(){
    int nilai,a;

   cout<<"masukkan batas : ";
   cin>>nilai; // batas banyak piramid segitiga pascal
    for (int i=0; i<=nilai; i++){
        for (int k=0; k<=((2*nilai)-(2*i)); k++){ // looping untuk mencetak spasi
            cout<<" ";
        }
        for (int j=0; j<=i; j++){ // looping untuk mencetak angka pada komponen segitiga pascal
            if (j==0||i==j){
                a=1;
            }else{
                a=a*(i+1-j)/j;
            }
            cout<<"   "<
        }
      cout<
    }
   getch();
}

Konversi Kalender

Dibawah ini adalah script C++ sederhana untuk menampilkan konversi kalender. Dari sebuah masukan oleh user berupa satuan minggu menjadi hari, bulan, dan tahun.
Source Code
#include
#include

int main(){
     float h,b,t,m;

   clrscr();
   cout<<" PENGHITUNGAN KALENDER";
   cout<<"Jumlah Minggu : ";
   cin>>m;

   h=7*m; // konversi dari minggu ke hari
   b=m/4; // konversi dari minggu ke bulan
   t=m/48; // konversi dari minggu ke tahun

   cout<<<" Minggu = "<<<" tahun = "<<<" bulan = "<<<" hari";

   getch();
}