Grafika Komputer Pertemuan Ke-15
BAB-14 FRAKTAL Pada materi ini akan dibahas tentang fraktal By: I Gusti Ngurah Suryantara, S.Kom., M.Kom
14.1. PENDAHULUAN Fraktal adalah benda geometris yang kasar pada segala skala, dan terlihat dapat "dibagibagi" dengan cara yang radikal. Beberapa fraktal bisa dipecah menjadi beberapa bagian yang semuanya mirip dengan fraktal aslinya. Fraktal dikatakan memiliki detil yang tak hingga dan dapat memiliki struktur serupa diri pada tingkat perbesaran yang berbeda. Pada banyak kasus, sebuah fraktal bisa dihasilkan dengan cara mengulang suatu pola, biasanya dalam proses rekursif atau iteratif. Bahasa Inggris dari fraktal adalah fractal. Istilah fractal dibuat oleh Benoît Mandelbrot pada tahun 1975 dari kata Latin fractus yang artinya "patah", "rusak", atau "tidak teratur". Sebelum Mandelbrot memperkenalkan istilah tersebut, nama umum untuk struktur semacamnya (misalnya bunga salju Koch) adalah kurva monster. Berbagai jenis fraktal pada awalnya dipelajari sebagai benda-benda matematis. Geometri fraktal adalah cabang matematika yang mempelajari sifat-sifat dan perilaku fraktal. Fraktal bisa membantu menjelaskan banyak situasi yang sulit dideskripsikan menggunakan geometri klasik, dan sudah cukup banyak diaplikasikan dalam sains, teknologi, dan seni karya komputer. Dulu ide-ide konsepsual fraktal muncul saat definisi-definisi tradisional geometri Euclid dan kalkulus gagal melakukan berbagai pengukuran pada benda-benda monster tersebut.
Gambar 14.1. Fraktal mandelbrot 179
Grafika Komputer Pertemuan Ke-15
Gambar 14.2. Segitiga sierpinski
14.2.KONTRIBUSI DARI ANALISIS KLASIK Benda-benda yang sekarang disebut fraktal sudah ditemukan dan dipelajari jauh sebelum kata fraktal muncul. Pada tahun 1872 Karl Theodor Wilhelm Weierstrass menemukan contoh fungsi dengan sifat yang tidak intuitif yaitu kontinyu di manapun namun tidak terdiferensiasi di manapun — grafik dari fungsi tersebut akan disebut fraktal di masa sekarang. Di tahun 1904 Helge von Koch, tidak puas dengan definisi Weierstraß yang sangat abstrak dan analitis, memberikan definisi yang lebih geometris untuk fungsi yang mirip, yang sekarang disebut bunga salju Koch. Ide mengenai kurva-kurva serupa diri dikembangkan lebih jauh oleh Paul Pierre Lévy, yang mengenalkan kurva fraktal baru bernama kurva Lévy C dalam tulisannya pada tahun 1938 berjudul Plane or Space Curves and Surfaces Consisting of Parts Similar to the Whole. Georg Cantor memberi contoh tentang berbagai himpunan bagian dari garis riil dengan sifat yang tidak wajar — himpunan Cantor tersebut juga sekarang dikenal sebagai fraktal. Fungsi teriterasi di bidang kompleks telah diselidiki pada akhir abad 19 dan awal abad 20 oleh Henri Poincaré, Felix Klein, Pierre Fatou, dan Gaston Julia. Namun tanpa bantuan grafika komputer modern, mereka tidak dapat melihat keindahan visual benda-benda yang mereka temukan.
180
Grafika Komputer Pertemuan Ke-15
Gambar 14.3. Fraktal bunga salju koch
14.3. ASPEK dari DESKRIPSI HIMPUNAN Dalam usahanya untuk memahami benda-benda seperti himpunan Cantor, matematikawan seperti Constantin Carathéodory dan Felix Hausdorff menggeneralisasi konsep intuitif dimensi agar memungkinkan nilai nonbulat. Ini termasuk bagian dari gerakan di pertengahan awal abad kedua puluh yang bertujuan menciptakan teori himpunan deskriptif, yaitu kelanjutan dari arah riset Cantor yang dapat mengklasifikasi himpunan titik-titik pada ruang Euclid. Definisi dimensi Hausdorff secara alami adalah geometris, walaupun didasarkan pada perkakas dari analisis matematis. Pendekatan ini digunakan oleh beberapa orang termasuk Besicovitch, yang berbeda dengan investigasi logis yang membangun sebagian besar teori himpunan deskriptif masa 1920-an dan 1930-an. Kedua bidang tersebut ditelusuri selama beberapa waktu setelahnya, terutama oleh para spesialis.
15.4. KONTRIBUSI MANDELBROT Pada tahun 1960-an Benoît Mandelbrot mulai menyelidiki keserupa dirian dalam berbagai tulisannya seperti How Long Is the Coast of Britain? Statistical Self-Similarity and Fractional Dimension. Penyelidikannya merupakan pengembangan dari penelitian Lewis Fry Richardson. Dengan pendekatan yang sangat visual, Mandelbrot mendapatkan hubungan dari berbagai topik matematika yang sebelumnya tidak berkaitan. Di tahun 1975, Mandelbrot menggunakan kata fractal untuk mendeskripsikan benda-benda serupa diri yang tidak memiliki dimensi yang jelas. Dia menurunkan kata fractal dari kata Latin fractus yang artinya "patah", "rusak", atau "tidak teratur". Kata
181
Grafika Komputer Pertemuan Ke-15 fractal bukan diturunkan dari kata fractional (pecahan), seperti yang dipercaya banyak orang. Kata fractional sendiri juga diturunkan dari fractus. Setelah visualisasi komputer diaplikasikan pada geometri fraktal, dapat disajikan argumen-argumen visual nan ampuh untuk menunjukkan bahwa geometri fraktal menghubungkan banyak bidang matematika dan sains, jauh lebih besar dan luas dari yang sebelumnya diperkirakan. Bidang-bidang yang terhubungkan oleh geometri fraktal terutama adalah dinamika nonlinier, teori chaos, dan kompleksitas. Salah satu contoh adalah menggambar metode Newton sebagai fraktal yang ternyata menunjukkan bahwa batas antara penyelesaian yang berbeda adalah fraktal dan penyelesaiannya sendiri adalah atraktor aneh. Geometri fraktal juga telah digunakan untuk kompresi data dan memodel sistem geologis dan organis yang kompleks, seperti pertumbuhan pohon dan perkembangan lembah sungai.
14.5. PENGELOMPOKAN Fraktal bisa dikelompokkan menjadi tiga kategori luas. Pengelompokan berikut didasarkan pada cara pendefinisian atau pembuatannya. • • •
Sistem fungsi teriterasi — Contohnya adalah himpunan Cantor, karpet Sierpinski, kurva Peano, bunga salju Koch, kurva naga Harter-Heighway, Kotak T, dan spons Menger. Fraktal waktu lolos — Contohnya adalah himpunan Mandelbrot dan fraktal Lyapunov. Fraktal acak — Dihasilkan melalui proses stokastik, misalnya landskap fraktal dan penerbangan Lévy.
Fraktal juga bisa dikelompokkan berdasarkan keserupa dirinya. Ada tiga tingkat keserupaan dirian pada fraktal: • Serupa diri secara persis — Ini adalah keserupa dirian yang paling kuat. Fraktalnya terlihat sama persis pada berbagai skala. Fraktal yang didefinisikan oleh sistem fungsi teriterasi biasanya bersifat serupa diri secara persis. • Serupa diri secara lemah — Ini adalah keserupa dirian yang tidak terlalu ketat. Fraktalnya terlihat mirip (tapi tidak persis sama) pada skala yang berbeda. Fraktal jenis ini memuat salinan dirinya sendiri dalam bentuk yang terdistorsi maupun rusak. • Serupa diri secara statistik — Ini adalah kererupadirian yang paling lemah. Fraktalnya memiliki ukuran numeris atau statistik yang terjaga pada skala yang berbeda. Kebanyakan definisi fraktal yang wajar secara trivial mengharuskan suatu bentuk keserupa dirian statistik. Dimensi fraktal sendiri adalah ukuran numeris yang nilainya terjaga pada berbagai skala. Fraktal acak adalah contoh fraktal yang serupa diri secara statistik, tapi tidak serupa diri secara persis maupun lemah.
182
Grafika Komputer Pertemuan Ke-15 Perlu dicatat bahwa tidak semua benda yang serupa diri adalah fraktal — misalnya garis riil (garis Euclid lurus) bersifat serupa diri, tapi argumen bahwa benda-benda Euclid adalah fraktal merupakan minoritas. Mandelbrot berargumen bahwa definisi "fraktal" sepatutnya menyertakan tidak hanya fraktal "sebenarnya", namun juga benda-benda Euclid tradisional, karena bilangan irasional di garis bilangan memiliki sifat-sifat kompleks dan tidak berulang. Karena fraktal memiliki detil yang tak terhingga, tidak ada benda alami yang merupakan fraktal. Namun pada skala yang terbatas benda-benda alam bisa menampakkan sifat-sifat fraktalnya.
14.6. DEFINISI Karakteristik fraktal, walaupun mudah dimengerti secara intuitif, ternyata sangat susah untuk dibuat definisi matematisnya. Mandelbrot mendefinisikan fraktal sebagai "himpunan yang dimensi Hausdorff Besicovitchnya lebih besar dari dimensi topologisnya". Untuk fraktal yang serupa diri secara persis, dimensi Hausdorffnya sama dengan dimensi Minkowsi Bouligandnya. Masalah-masalah yang dihadapi saat mendefinisikan fraktal termasuk: 1. Tidak ada definisi matematis dari "terlalu tidak terartur". 2. Tidak ada definisi tunggal mengenai "dimensi". 3. Suatu benda dapat bersifat serupa diri dengan berbagai cara. 4. Tidak setiap fraktal didefinisikan secara rekursif.
Contoh Pohon dan pakis adalah contoh fractal di alam dan dapat dimodel pada komputer menggunakan algoritma rekursif. Sifat rekursifnya bisa dilihat dengan mudah — ambil satu cabang dari suatu pohon dan akan terlihat bahwa cabang tersebut adalah miniatur dari pohonnya secara keseluruhan (tidak sama persis, tapi mirip). Contoh yang relatif sederhana adalah himpunan Cantor, di mana selang terbuka yang pendek dan semakin pendek tersebar pada selang dasar [0, 1], menyisakan himpunan yang mungkin serupa diri, dan mungkin memiliki dimensi d yang memenuhi 0 < d < 1. Suatu resep sederhana, yaitu menghilangkan digit 7 dari ekspansi desimal, menghasilkan himpunan Cantor yang serupa diri pada perbesaran lipat 10. Secara umum fraktal bentuknya tidak teratur (tidak halus), jadi bukan termasuk benda yang terdefinisikan oleh geometri tradisional. Ini berarti bahwa fraktal cenderung memiliki detil yang signifikan, terlihat dalam skala berapapun; saat ada keserupa dirian, ini bisa terjadi karena memperbesar fraktal tersebut akan menunjukkan gambar yang mirip. Himpunan-himpunan tersebut biasanya didefinisikan dengan rekursi.
183
Grafika Komputer Pertemuan Ke-15
Sebagai perbandingan, ambil benda Euklid biasa, misalnya lingkaran. Lengkung pada lingkaran akan terlihat semakin datar jika diperbesar. Pada perbesaran tak terhingga tidak mungkin lagi terlihat perbedaan antara lengkung lingkaran dengan garis lurus. Fraktal tidak seperti ini. Ide konvensional kurvatur, yang merupakan resiprokal dari jarijari lingkaran aproksimasi, tidak bisa digunakan. Pada fraktal, meningkatkan perbesaran akan menunjukkan detil yang tidak terlihat sebelumnya. Beberapa contoh fraktal yang umum adalah himpunan Mandelbrot, fraktal Lyapunov, himpunan Cantor, segitiga Sierpinski, karpet Sierpinski, spons Menger, kurva naga, kurva Peano, dan kurva Koch. Fraktal bisa deterministik maupun stokastik. Sistem dinamikal chaotis sering (bahkan mungkin selalu) dihubungkan dengan fraktal. Benda-benda yang mendekati fraktal bisa ditemukan dengan mudah di alam. Bendabenda tesebut menunjukkan struktur frakral yang kompleks pada skala tertentu. Contohnya adalah awan, gunung, jaringan sungai, dan sistem pembuluh darah. Harrison (en) [1] meluaskan kalkulus Newtonian ke domain fraktal, termasuk teorema Gauss, Green, dan Stokes Fraktal biasanya digambar oleh komputer dengan perangkat lunak fraktal. Lihat daftarnya di bawah. Fraktal acak memiliki kegunaan praktis yang terbesar sebab dapat digunakan untuk mendeskripsikan banyak benda di alam. Contohnya adalah awan, gunung, turbulensi, garis pantai, dan pohon. Teknik-teknik fraktal juga telah digunakan pada kompresi gambar fraktal dan berbagai disiplin sains.
184
Grafika Komputer Pertemuan Ke-15
14.7. KURVA FRAKTAL Kurva yang kompleks dapat dibuat secara rekursif dengan cara berulang-ulang penghalusan kurva. Gambar berikut menunjukkan kurva Koch. Ide dasar dari kurva ini adalah bagilah masing-masing segmen Kn ke dalam tiga bagian yang sama besar, dan gantikan bagian tengah dengan jendul dalam bentuk segitiga sama sisi.
185
Grafika Komputer Pertemuan Ke-15
14.8. KURVA LINDENMAYER (Sistem L) Contoh pada gambar berikut menunjukkan telah menggunakan teori penghasil string dan dibangkitkan dari Sistem L. Sistem ini merupakan cara yang berguna untuk penggambaran semua urutan pohon.
Sebuah sistem-L bekerja dengan urutan string yang masing-masing simbol dalam urutan instruksi yang diberikan. ‘F’ berarti maju selangkah ‘+’ berarti belok kanan dengan sudut x drajat. ‘-’ berarti x diset dan ditentukan sebelumnya. Misalnya string F+F-F berati maju selangkah, belok kanan, maju selangkah, belok kiri dan maju selangkah.
Jika kita lanjutkan sistem L dengan pembuatan aturan penghasilan string maka hasilnya dapat berbeda dan menarik.
186
Grafika Komputer Pertemuan Ke-15
14.9. SET MANDELBROT Kemungkinan besar, yang paling terkenal dan pengenalan fraktal adalah set Mandelbrot. Baik set Mandelbrot ataupun Set Julia menguji hasil iterasi tak hingga dari sebuah fungsi. Grafika komputer menyediakan cara yang terbaik untuk mengilustrasikan hasilnya dalam cara yang menarik dan secara grafik/ cara alami dari fraktal ini akan diuji secara visual dan cara yang lebih mudah daripada menggunakan banyak angka. Set Mandelbrot menggunakan: f(z) = z2 + c dengan c merupakan konstanta tertentu Sistem menghasilkan masing-masing “output” dengan mengkuadratkan “input” dan menambahkan dengan c. ORBIT input menentukan bagaimana nilai digambarkan. Orbit adalah set nilai “output” sebagai fungsi yang diiterasi. Contoh” f(z) = z2 + 2 dengan z mulai dengan 0 maka urutan output adalah: 2, 6, 38, 1446, 2090918, … Orbit dikatakan menjadi tak terhingga sebagaimana nilainya didekati dengan tak terhingga (dikenal dengan orbit tak terhingga). Orbit tak berhingga adalah satu dengan nilai diset dengan nilai sekitar satu. Contoh: f(z) = z2 – 1 dengan z mulai = 0 urutan output adalah: 0, -1, 0, -1, 0, -1. Nilai-nilai ini tak pernah berakhir dan perlu dibatasi ! Definisi: Set Mandelbrot, M, adalah set semua bilangan kompleks, c, yang menghasilkan orbit terhingga dari nilai permulaan z = 0. Ini berarti bahwa dengan nilai permulaan 0, yang dengan nilai c (menggunakan bilangan kompleks) menghasilkan urutan output terhingga. Mungkin nilai-nilainya: 0,c,c2+c,(c2+c)+c,… Dengan c = x+yi
187
Grafika Komputer Pertemuan Ke-15
14.10. MATERI LAB 14.10.1.Program fraktal segitiga spriesky Tambahkan sebuah form, dan beri nama formnya frmSierpinski.
. Gambar 14.4. Tampilan segitiga sierpinski Program 'Nama Program: Fraktal Sierpinski Option Explicit Private Private Private Private
LastX As Single LastY As Single CornerX(0 To 2) As Single CornerY(0 To 2) As Single
' Draw the Sierpinski gasket. Private Sub Form_Load() Dim i As Integer Randomize Me.Show Do ' Pick the next corner. i = Int(Rnd * 3) ' Move halfway from the current point ' to the new corner. LastX = (LastX + CornerX(i)) / 2 LastY = (LastY + CornerY(i)) / 2 Me.PSet (LastX, LastY) ' Check for events. DoEvents Loop End Sub ' Define the corner points. Private Sub Form_Resize() Const R As Single = 60 Dim i As Integer ' Clear. Me.Cls
188
Grafika Komputer Pertemuan Ke-15 ' Define the CornerX(0) = CornerY(0) = CornerX(1) = CornerY(1) = CornerX(2) = CornerY(2) =
corners. R + 10 Me.ScaleHeight - R - 10 Me.ScaleWidth / 2 R + 10 Me.ScaleWidth - R - 10 Me.ScaleHeight - R - 10
' Draw the corners. For i = 0 To 2 Me.Circle (CornerX(i), CornerY(i)), R Next i ' Pick a starting point. i = Int(Rnd * 3) LastX = CornerX(i) LastY = CornerY(i) End Sub Private Sub Form_Unload(Cancel As Integer) End End Sub
14.10.2.Program fraktal MidelBort Tambahkan sebuah form, dan beri nama formnya frmMidelBort
Gambar 15.2. Fraktal MidelBort
Nama objek Form1 PictuteBox1 PictureBox2 Button1 Button2
Setting property Property Setting Name Form1 Caption frmMidelBort Name Picture1 Name Picture2 Name Command1 Caption Refresh Name Command2 Caption Stop 189
Grafika Komputer Pertemuan Ke-15 Program Buat program ini di module Type complex real As Double i As Double End Type Dim scheme As Integer Dim drawing As Integer Dim stop_draw As Integer Function init() stop_draw = 0 End Function Function stop_drawing() stop_draw = 1 End Function Function set_scheme(x As Integer) scheme = x End Function Function add(x1 As complex, x2 As complex) As complex Dim temp As complex Dim a1 As Double Dim a2 As Double Dim b1 As Double Dim b2 As Double a1 = x1.real b1 = x1.i a2 = x2.real b2 = x2.i temp.real = a1 + a2 temp.i = b1 + b2 add = temp End Function Function mul(x1 As complex, x2 As complex) As complex Dim temp As complex Dim a1 As Double Dim a2 As Double Dim b1 As Double Dim b2 As Double a1 = x1.real b1 = x1.i a2 = x2.real b2 = x2.i temp.real = a1 * a2 - b1 * b2 temp.i = a1 * b2 + a2 * b1 mul = temp End Function
190
Grafika Komputer Pertemuan Ke-15 Function dist(x As Double, Y As Double) As Double dist = Sqr(((x - 0) ^ 2) + ((Y - 0) ^ 2)) End Function Function is_in_Mset(c As complex, n As Integer) As Integer Dim Z As complex Dim tZ As complex Z.real = 0 Z.i = 0 tZ.real = 0 tZ.i = 0 For i = 1 To n tZ = add(mul(Z, Z), c) Z = tZ If dist(Z.real, Z.i) >= 2 Then is_in_Mset = i GoTo done End If Next i is_in_Mset = 0 done: End Function Function draw(pic As PictureBox, x1 As Double, y1 As Double, x2 As Double, y2 As Double, detail As Integer) init Dim t As complex Dim x As Double Dim Y As Double Dim c As Integer Dim scaleY As Double Dim scaleX As Double frmMidelBort.Command1.Enabled = False scaleX = (x2 - x1) / pic.Width scaleY = (y2 - y1) / pic.Height drawing = 1 pic.Cls pic.DrawWidth = 1 det = 1 frmMidelBort.Picture2.Cls frmMidelBort.Picture2.Print "Rendering - Detail grade "; det For i = 0 To pic.Width Step det For j = 0 To pic.Height Step det x = x1 + (i * scaleX) Y = y1 + (j * scaleY) t.real = x t.i = Y c = is_in_Mset(t, 100)
191
Grafika Komputer Pertemuan Ke-15 If stop_draw = 1 Then GoTo zip_it pic.Line (i + det, 0)-(i + det, pic.Height), QBColor(15) If scheme = 1 Then pic.Line (i, j)-(i + det, j + det), QBColor(c Mod 16), BF If scheme = 2 Then pic.Line (i, j)-(i + det, j + det), RGB((c Mod 50) * 10, (c Mod 100) * 20, (c Mod 200) * 12), BF If scheme = 3 Then pic.Line (i, j)-(i + det, j + det), RGB((c Mod 60) * 10, (c Mod 100) * 20, (c Mod 200) * 200), BF If scheme = 4 Then pic.Line (i, j)-(i + det, j + det), RGB((c Mod 60) * 250, (c Mod 100) * 50, (c Mod 200) * 20), BF If scheme = 5 Then pic.Line (i, j)-(i + det, j + det), RGB((c Mod 10) * 250, (c Mod 6) * 70, (c Mod 20) * 20), BF Next j If stop_draw = 1 Then GoTo zip_it DoEvents Next i drawing = 0 zip_it: frmMidelBort.Command1.Enabled = True frmMidelBort.Picture2.Cls frmMidelBort.Picture2.Print "Drag mouse untuk area yang akan di ZOOM" End Function
Buat program ini di form Dim Dim Dim Dim
x1 x2 y1 y2
Dim Dim Dim Dim
tx1 tx2 ty1 ty2
As As As As As As As As
Double Double Double Double Double Double Double Double
Dim down As Integer Dim sY As Double Dim sX As Double Private Sub Command1_Click() sX = (x2 - x1) / Picture1.Width sY = (y2 - y1) / Picture1.Height draw Picture1, x1, y1, x2, y2, 100 End Sub Private Sub Command2_Click() stop_drawing End Sub Private Sub Form_Activate() 'sX = (x2 - x1) / Picture1.Width 'sY = (y2 - y1) / Picture1.Height 'draw Picture1, x1, y1, x2, y2, 100 set_scheme 5 draw_it End Sub
192
Grafika Komputer Pertemuan Ke-15 Private Sub Form_Load() x1 = -2 y1 = -1.5 x2 = 1 y2 = 1.5 down = 0 drawing = 0 init End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) End End Sub Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single) If drawing = 0 Then Picture1.DrawMode = 6 Picture1.DrawWidth = 3 'Picture1.Line (tx1, ty1)-(tx2, ty2), 1, B down = 1 tx1 = x ty1 = Y tx2 = x ty2 = Y End If End Sub Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single) If down = 1 Then frmMidelBort.Cls frmMidelBort.Print tx1, ty1, tx2, ty2 Picture1.Line (tx1, ty1)-(tx2, ty2), 1, B tx2 = x ty2 = ty1 + ((tx2 - tx1) * (Picture1.Height / Picture1.Width)) 'ty2 = Y Picture1.Line (tx1, ty1)-(tx2, ty2), 1, B End If End Sub Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, x As Single, Y As Single) down = 0 Picture1.DrawMode = 13 x2 = tx2 * sX + x1 y2 = ty2 * sY + y1 x1 = tx1 * sX + x1 y1 = ty1 * sY + y1 'sX = (x2 - x1) / Picture1.Width 'sY = (y2 - y1) / Picture1.Height 'draw Picture1, x1, y1, x2, y2, 100 draw_it End Sub
193
Grafika Komputer Pertemuan Ke-15 Function draw_it() sX = (x2 - x1) / Picture1.Width sY = (y2 - y1) / Picture1.Height draw Picture1, x1, y1, x2, y2, 100 End Function
194