//
archives

Java

This category contains 2 posts

Perbedaan Sintaks i++ dan ++i dalam Java


Beberapa waktu lalu saya mendapatkan sebuah kasus dimana harus membedakan antara i++ dan ++i di dalam Java. Berikut jawabannya:

i++ = variabel akan DICETAK terlebih dahulu kemudian DITAMBAHKAN.

++i = variabel akan DITAMBAHKAN terlebih dahulu kemudian DICETAK.

Contoh kode untuk testing:

int i = 5;
System.out.println("i = " + i);
System.out.println("i++ = " + i++);
System.out.println("++i = " + ++i);

Maka output seharusnya adalah:
5
5
7

Silahkan dicoba.

Iklan

Algoritma Pembentukan Garis dalam Grafika Komputer


Sebelum membahas mengenai Algoritma Pembentukan Garis, alangkah baiknya kita bahas dulu apa itu Garis? Garis adalah penghubung antara dua buah titik (titik awal dan titik akhir).

Seperti yang kita tahu, bahwa persamaan garis lurus dinyatakan dalam rumus: y=mx+c. Dimana m adalah gradien yang didapatkan dari hasil pembagian deltaY dengan deltaX dan c adalah sebuah konstanta. Berangkat dari sini kita coba mulai untuk membahas algortima apa saja yang digunakan dalam pembuatan garis lurus.

Algoritma Naive

  1. Tentukan titik-titik penghubung koordinat awal dan akhir.
  2. Dimulai dari titik (XAwal, Yawal), untuk menentukan titik selanjutnya, increment-kan Xi sebanyak 1 satuan. Lalu Yi dihitung dengan menggunakan rumus Yi = (m*Xi)+c.

Jika diimplementasikan dalam bahasa Java kurang lebih seperti ini:

float X1 = 0; float X2 = 3;
float Y1 = 0; float Y2 = 10;
float Dx = X2 - X1;
float Dy = Y2 - Y1;

float m = (Y2-Y1)/(X2-X1);
float c = Y1-(m*X1);
float Xi;
float Yi;

if (Math.abs(Dx) < Math.abs(Dy)) {
    Yi = Y1;
    while(Yi <=Y2){
        Xi=(Yi-c)/m;
        g.drawRect(Math.round(Xi),Math.round(Yi), 5,5);
        Yi++;
    }
} else {
    Xi = X1;
    while(Xi <= X2){
        Yi=(m*Xi)+c;
        g.drawRect(Math.round(Xi),Math.round(Yi),5,5);
        Xi++;
    }
}

Penjelasan kode:

Pertama, kita inisialisasi kan terlebih dahulu titik awal dan titik akhir. Dalam hal ini (X1,Y1) sebagai titik awal dan (X2,Y2) sebagai titik akhir. Lalu, dihitung gradien garis dan juga konstanta dari persamaan y = mx + c. Sebenarnya inti dari algoritma naive terletak dalam perulangan dimana Xi < = X2. Adapun Dx dan Dy dibuat hanya untuk mengetahui kemana titik yang membentuk garis akan bergerak. Gak ngerti kan? :P. Cobain aja deh sendiri, nanti juga ngerti ko. 🙂

Algortima Digital Differential Analyzer

  1. Tentukan dua buah titik.
  2. Titik awal (Xawal, Yawal) dan titik akhir (XAkhir, Yakhir).
  3. Hitung Dx dan Dy menggunakan rumus:

    Dx = XAkhir – Xawal,

    Dy = Yakhir – Yawal

  4. Bandingkan nilai mutlak Dx dan Dy. Jika Dx > Dy, maka steps = nilai absolut Dx. Jika Dx < Dy, maka steps = nilai absolut Dy.
  5. Hitung penambahan increment untuk X dengan xInc = Dx/steps dan yInc = Dy/steps.
  6. Kemudian increment-kan nilai Xi dengan nilai xInc, juga Yi dengan yInc.
  7. Bulatkan nilai koordinat untuk menentukan posisi pixel.
  8. Ulangi langkah 6 dan 7 sampai Xi = Xakhir dan Yi = Yakhir.

Jika diimplementasikan dalam bahasa Java kurang lebih seperti ini:

int X1 = 0;
int X2 = 100;
int Y1 = 0;
int Y2 = 30;
int Dx = X2-X1;
int Dy = Y2-Y1;
int steps;
float xInc, yInc;
float x = X1;
float y = Y1;
if (Math.abs(Dx) > Math.abs(Dy)) {
    steps = (int) Math.abs(Dx);
} else {
    steps = (int) Math.abs(Dy);
}

xInc = Dx / (float) steps;
yInc = Dy / (float) steps;

for (int k = 0; k < steps; k++) {
    x += xInc;
    y += yInc;
    g.drawRect((int) Math.round(x), (int) Math.round(y),5,5);
}

Penjelasan kode:

Dalam DDA, yang kita lakukan adalah mencari nilai absolut dari deltaX dan deltaY dan kemudian dibandingkan untuk menentukan steps. Steps ini nantinya digunakan sebagai nilai pembatas perulangan. Sehingga dalam satu perulangan x dan y di increment-kan bersama. 🙂

 

Algoritma Midpoint

Untuk algoritma ini masih dalam tahap analisis. Jika saya sudah paham benar baru saya akan cantumkan. Hehe :).

 

Apabila masih ada algoritma yang kurang efektif, saran dan masukan sangat saya harapkan.

Semoga Bermanfaat. :)

%d blogger menyukai ini: