Sabtu, 20 Oktober 2012

Membuat Segitiga Sierpinski Dengan Java


Disini saya sedikit mereview tentang praktikum ke-5 untuk matakuliah ALPRO1 kelas B. Hari itu adalah hari senin, tepat pada tanggal 28 Nopember 2011, dimana pada hari itu ada sebuah praktikum yang ke-5 untuk matakuliah ALPRO 1 bagi kelas B di jurusan Sistem Informasi ITS. Praktikum kali ini membahas tentang konsep fraktal.

Sebelum ini saya telah menjelaskan mengenai fraktal. Dan saya telah menjelaskan secara singkat mengenai salah satu contoh fraktal yakni segitiga sierpinski. Segitiga yang terus membagi dirinya dengan segitiga-segitiga lain yang mirip namun dengan skala yang terus berbeda.
Fraktal-fraktal tersebut dapat dimodelkan dengan bantuan komputer. Salah satu cara untuk memodelkannya adalah dengan menggunakan bahasa pemrograman java. Dengan logika yang telah dijelaskan pada artikel sebelumnya kita dapat membuat segitiga sierpinski tersebut.

Penjelasan diatas merupakan penjelasan sedikit tentang materi yang bersangkutan untuk praktikum ALPRO1 yang ke-5 ini. Dalam praktikum kali ini kami diminta untuk membuat sebuah segitiga sierpinski dalam bahasa java persis seperti ulasan materi diatas.

Berikut adalah source code nya. Untuk membuat program ini, kita dapat membuatnya menjadi dua  class. Class pertama berisi atribut dan method yang diperlukan, dan class kedua berfungsi untuk menampilkan object yang dibuat, yakni segitiga sierpinski. Level kedalaman segitiga dibuat berdasarkan inputan dari user.


Di bawah ini adalah Class pertamanya :

 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


import java.awt.*;
import javax.swing.*;
/**
*
* @author Rachmat Arif
*/
public class Sierpinski extends JPanel{
public static final int WINDOWSIZE = 512;
static Polygon[] polyList;
static int count = 0;

public static void gambarSegitiga(int splits, int ax, int ay, int bx, int by, int cx, int cy){
        int[] C1 = {ax,ay};
        int[] C2 = {bx,by};
        int[] C3 = {cx,cy};
        if(splits == 1){
                int[]ps={ax,bx,cx};
                int[]qs={ay,by,cy};
                Polygon p = new Polygon(ps,qs,ps.length);
                polyList[count] = p;
                count++;
        } else{
                int[] C4 = getMidpoint(ax, ay, bx, by);
                int[] C5 = getMidpoint(bx, by, cx, cy);
                int[] C6 = getMidpoint(ax, ay, cx, cy);

                gambarSegitiga(splits - 1,C1[0],C1[1],C4[0],C4[1],C6[0],C6[1]);
                gambarSegitiga(splits - 1,C4[0],C4[1],C2[0],C2[1],C5[0],C5[1]);
                gambarSegitiga(splits - 1,C6[0],C6[1],C5[0],C5[1],C3[0],C3[1]);
        }
}
public static int[] getMidpoint(int ax, int ay, int bx, int by){
        int[] mid = new int[2];
        mid[0] = (ax + bx)/2;
        mid[1] = (ay + by)/2;
        return mid;
}


public void paint(Graphics g){
        for(int i = 0; i < polyList.length; i++)
        {g.fillPolygon(polyList[i]);}
}
} 

Berikut adalah Class keduanya, dimana dalam kelas ini berisi main yang berfungsi untuk memanggil Class pertama

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import java.awt.Color;
import java.awt.Polygon;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
/**
 *
 * @author Rachmat Arif
 */
public class Remote extends Sierpinski {
public static void main (String[] args)
    {
        int C1x = WINDOWSIZE/2;
        int C1y = WINDOWSIZE/10;
        int C2x = WINDOWSIZE-C1y;
        int C2y = WINDOWSIZE-C1y;
        int C3x = WINDOWSIZE/10;
        int C3y = WINDOWSIZE-C1y;

        String input = JOptionPane.showInputDialog("Enter Your Choice Number:");
        int splits = Integer.parseInt(input);
        polyList = new Polygon[(int)Math.pow(3,splits-1)];
        JFrame fr = new JFrame("Sierpinski's Triangle!");
        fr.setSize(WINDOWSIZE,WINDOWSIZE);
        fr.setBackground(Color.CYAN);
        fr.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        fr.setVisible(true);

        gambarSegitiga(splits,C1x,C1y,C2x,C2y,C3x,C3y);
        Sierpinski s = new Sierpinski();
        fr.add(s);
        
        
    }
}

2 komentar:

  1. nice bung
    cocok sekali dengan praktikum kami kali ini
    thank's

    BalasHapus
  2. maaf mau tanya, untuk membuat form input dan form hasil output gambar gimana??

    BalasHapus