*About Segitiga Sierpinski*

Dengan menyebut nama Allah Yang Maha Pengasih Lagi Maha Penyayang

Di postingan kali ini sebenarnya saya mau curhat tentang praktikum Alpro1. Hhhee. Tapi saya mau share nih program dan mungkin nantinya bisa berguna buat orang lain =))
Yang pertama saya akan menjelaskan sebenarnya apa sih segitiga Sierpinski itu ? Segitiga Sierpinski adalah Segitiga yang terus membagi dirinya dengan segitiga-segitiga lain yang mirip namun dengan skala yang terus berbeda.
Segitiga Sierpinski adalah salah satu contoh fraktal. Pada fraktal, ketika bagian dari suatu sistem membesar
dengan perbesaran yang sama pada berbagai arah, maka bentuk tersebut akan menyerupai bentuk keseluruhannya. Ciri khas fraktal di sini yaitu memiliki 2 dimensi dalam bentuk pecahan.

Sekarang langsung ke source kodenya yaa. Tapi maaf nih saya cuma punya yang buat Java ..

    import java.awt.*;
    import java.util.*;
    import javax.swing.*;

    public class Sierpinski extends JPanel
    {
    // set window size here
    public static final int WINDOWSIZE = 500;

    // some static variables
    static Polygon[] polyList;
    static int count = 0;

    public static void drawTriangles(int splits, int ax, int ay, int bx, int by, int cx, int cy)
    {
    int[] p1 = {ax,ay};
    int[] p2 = {bx,by};
    int[] p3 = {cx,cy};

    if(splits == 1){
    //create basic triangle
    int[]xs={ax,bx,cx};
    int[]ys={ay,by,cy};
    Polygon p = new Polygon(xs,ys,xs.length);

    polyList[count] = p;
    count++;
    }
    else
    {
    //get midpoints for each side
    int[] p4 = getMidpoint(ax, ay, bx, by);
    int[] p5 = getMidpoint(bx, by, cx, cy);
    int[] p6 = getMidpoint(ax, ay, cx, cy);

    // 3 new triangles
    drawTriangles(splits - 1,p1[0],p1[1],p4[0],p4[1],p6[0],p6[1]);
    drawTriangles(splits - 1,p4[0],p4[1],p2[0],p2[1],p5[0],p5[1]);
    drawTriangles(splits - 1,p6[0],p6[1],p5[0],p5[1],p3[0],p3[1]);
    }
    }

    // returns the midpoint as an array [x,y] of any line given the coordinates
    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]);
    }
    }

    public static void main (String[] args)
    {
    // make the base triangle based on the window size
    //point 1 -- top
    int p1x = WINDOWSIZE/2;
    int p1y = WINDOWSIZE/10;
    //point 2 -- bottom right
    int p2x = WINDOWSIZE-p1y;
    int p2y = WINDOWSIZE-p1y;
    //point 3 -- bottom left
    int p3x = WINDOWSIZE/10;
    int p3y = WINDOWSIZE-p1y;

    // ask user how many splits
    Scanner keyboard = new Scanner(System.in);
    System.out.print("How many splits? ");
    int splits = keyboard.nextInt();
    polyList = new Polygon[(int)Math.pow(3,splits-1)];


    // new window
    JFrame f = new JFrame("Sierpinski's Triangle!");
    f.setSize(WINDOWSIZE,WINDOWSIZE);
    f.setBackground(Color.YELLOW);
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f.setVisible(true);

    drawTriangles(splits,p1x,p1y,p2x,p2y,p3x,p3y);

    Sierpinski s = new Sierpinski();
    f.add(s);
    }
}
 


Di source kode ini saya langsung membuat code Segitiga Sierpinski dalam satu kelas yaitu kelas Sierpinski.
Alur pembuatan dari segitiga Sierpinski adalah :
1. pada langkah pertama ( n = 0)
   kita mulai dari sebuah segitiga sama sisi yang masing-masing sisinya bernilai 1 satuan.

2. Pada langkah selanjutnya ( n = 1), kita harus memotong seluruh bagian tengah segitiga tersebut oleh suatu
   bentuk segitiga terbalik.

3. Kemudian pada n = 2 , lakukan hal yang sama untuk setiap segitiga yang terbentuk dari langkah sebelumnya.

4. Proses tersebut diulang terus menerus sampai n = ¥. (Tentu saja, hal ini dapat dilakukan dalam pikiran,
   tetapi tidak dalam kenyataan.)

5. Himpunan dari segitiga pada langkah terakhir ( n = ¥) adalah Segitiga Sierpinski yang diinginkan.

6. Mudah untuk dipahami bahwa setiap bagian kecil dari Segitiga sierpinski memiliki bentuk yang sama seperti
   keseluruhannya.

Lalu bagaimana dengan attribut dan behaviour source kode ini ?
Atributnya antara lain :
1. Static Polygon[] Polylist : merupakan dasar pembuatan tiga titik segitiga
2. Static Int Count : sebagai setting saat n=0 maka akan terbentuk basic triangle
3. WINDOWSIZE : mengeset ukuran Jendela untuk segitiga yang akan dibuat

Behaviournya antara lain :
1. public static void drawTriangles(int splits, int ax, int ay, int bx, int by, int cx, int cy)
   *untuk menentukan titik titik pada segitiga yang akan dibentuk
2. public static int[] getMidpoint
   *untuk menentukan titik tengah segitiga yang akan dibentuk
3. public void paint(Graphics g)
   *untuk menentukan warna pada polygon

Nah tamat sudah postingan saya yang berisi curhat colongan ketika praktikum Alpro1. Semoga bermanfaat bagi anda. Kalo ada kritik dan sarang tentang source code ini mohon memberi komentar, terima kasih =)

2 komentar:

Rachmat Arif mengatakan...

Sangat membantu sekali...

comment from : http://rachmatarif.blogspot.com

Rosalia Rossa mengatakan...

haha .. nanti postingan source code lagi =D

Posting Komentar