Sunday, September 2, 2012

Mandelbrot Kümesi ve Fraktal Simülasyonu - [Proje]

Yaklaşık 2 hafta önce izlemiş olduğum BBC Science tarafından hazırlanmış "The Secret Life of Chaos" (Kaos'un Gizli Yaşamı) belgeseli ile daha önceden fikir sahibi olduğum fakat vakit nedeniyle pek üzerine düşünemediğim bir konu olan fraktallar ile ilgili araştırma hevesim tekrar gün yüzüne çıktı. Fraktal, matematikte çoğunlukla kendine benzeme özelliği gösteren karmaşık geometrik şekillerin ortak adıdır. Daha basit tanımıyla, kendi kendini sonsuza kadar tekrar eden şekiller olarakta görebiliriz.

"The Secret Life of Chaos" belgeselinde bahsi geçen fraktal kümelerinden birisi de "Mandelbrot kümesi"dir. Mandelbrot kümesi, Benoit Mandelbrot'un ikinci derece kompleks değişkenli polinomların dinamiklerini açıklamak için geliştirdiği ve incelediği kümedir. Mandelbrot kümesi, karmaşık düzlemin bir fraktal alt kümesidir.

Bugünkü yazımda bahsedeceğim konu ise, Mandelbrot kümesinin, Java programlama dili ve OpenGL kütüphanesi kullanılarak hazırlanmış simülasyonudur. Programı yazarken kullandığım algoritmanın pseudocode hali buradaki linkte mevcuttur.

Programın kullanımı çok basit. Öncelikle Grafik ve Ayarlar Paneli olmak üzere 2 kısımdan oluşan programda, Grafik kısmına farenin mercek(zoom) görevi görebilen tekerlek kısmı ile fraktalın istediğiniz bölgesine yakınlaştırma ya da uzaklaştırma yapabilirsiniz.


Programı ilk başlattığınız sırada mavi tonlarının hakim olduğunu göreceksiniz. Ayarlar panelinden, R(Red - Kırmızı), G(Green - Yeşil), B(Blue - Mavi) Sliderları ile oynayarak fraktala 24-bit skalasında istediğiniz rengi verebilirsiniz.



Yaptığınız zoom sayısı Grafik penceresinin sol alt köşesinde yer almaktadır. Toplamda 255 kere zoom yapabilirsiniz. 255 zoomdan sonra Java'daki double veri tipi, daha hassas bir hesaplamaya elverişli olmadığı için, gerçek değerler yerine gerçeğe yakın tahmini değerlere yuvarlanmaktadır. Bu işlem sonucunda sağlıklı bir görüntüleme yapılamadığı gibi ekranda pikselleşme olmaktadır. Bu yüzden zoom seviyesini 255 ile sınırladım.


Programla oynayarak çeşitli paternler elde edebilirsiniz. Gerçekten çok hoş ve şaşırtıcı şablonlar görebilirsiniz.










Projeyi boş vaktimde geliştirdim. Matematikle ilgili olan şeylerin simülasyona dökülmesi ve görsel modeller elde edebildiğimiz programlar her zaman hoşuma gitmiştir. Yazıma son vermeden önce projeden biraz daha bahsetmek istiyorum. Öncelikle proje Java programlama dili kullanılarak yazıldığı için biraz yavaş çalışıyor. Bu yavaşlık, 2 boyutlu düzlem üzerinde
fc : C -> C iken f(Zn+1) = Zn2 + c
hesaplamasını döngüler(Her bir pikselin renk değerinin hesaplanması süreci) içinde yaparken gerçekleşiyor. Özellikle denklem hesaplaması karmaşık sayılar kümesi üzerinde yapıldığı için bu işlem biraz daha sistemi yoruyor. Karmaşık sayılarda daha rahat hesaplama yapılabilmesi için "ComplexNumber" adında bi class(sınıf) oluşturdum. Belki bu yavaşlığı giderecek ufak optimizasyonlar yapılabilir. Ya da daha sonradan aklıma gelen özelliklerden birisi olan Grafik ekranındaki görüntüyü kullanıcının kaydedebilmesini sağlayan bir modül yazılabilir. Ayrıca "Mandelbrot kümesi"nin yanısıra "Julia kümesi"nin de şablonunu çıkaran ikinci bir modül daha eklenebilir.

İlgilenenler kaynak kodu buradan indirebilir. Projeyi daha önce bahsettiğim gibi Java Programlama dilinde OpenGL kütüphanesini kullanarak Eclipse (Juno) üzerinde geliştirip Ubuntu 12.04 LTS üzerinde derleyip çalıştırdım. Sizde kaynak kodlarda herhangi bir oynamaya gerek kalmadan programı derleyip çalıştırabilirsiniz. Çalıştıramadığınız ve hata aldığınız takdirde buraya yorum olarak yazarsanız yardımcı olmaya çalışırım.

1 comment:

  1. İndirdiğimiz doayadaki jarları nasıl açacağız?

    ReplyDelete