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.
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.
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);
}
}
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.
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
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
*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:
Sangat membantu sekali...
comment from : http://rachmatarif.blogspot.com
haha .. nanti postingan source code lagi =D
Posting Komentar