Back to top

Fraktale

Technologie: Java

Aktualnym "produktem" projektu jest program "Fractal" - cyfrowa maszyna do zamiany kodu Javy na grafikę :) Nawiązanie do obrazów samopodobnych w nazwie, tak projektu jaki i programu, jest powiązane bardziej z ideą, która stoi za całym przedsięwzięciem, niż z implementacją - sama "maszyna" jest dość uniwersalna i nie ogranicza się tylko do tego konkretnego typu grafik (to najprawdopodobniej zaowocuje kilkoma zmianami w obszarze "nazewnictwa" w przyszłości).

Główne elementy projektu to:
- Maszyna - program Fractal
- Dane wejściowe, czyli "kod grafiki" - kod źródłowy w Javie klasy dziedziczącej po klasie "Fractal", np.: f06.java

W wyniku "przetworzenia" danych wejściowych przez "maszynę" otrzymujemy wynik w postaci pliku png, dla przykładowych danych wejściowych (pliku f06.java) będzie to grafika zaprezentowana po prawej stronie - czyli "paprotka".

Dlaczego właśnie tak

Głównym celem było znalezienie sposobu na łatwe i szybkie "tworzenie" plików zawierających kod samych grafik (fraktali), oraz dostarczenie "maszyny" przetwarzającej tak przygotowany kod w grafikę. Rozważałem wykorzystanie narzędzi typu Matlab czy Octave, ale ostatecznie wygrała Java ze względu na swoją uniwersalność i wszechstronność :)

Implikacje - wymagane JDK!

Ponieważ program kompiluje przekazany w formie parametru kod w trakcie wykonania, dlatego do jego działanie niestety nie wystarczy podstawowe środowisko uruchomieniowe Javy - JRE, wymagany jest kompilator, który dostarczany jest w pakiecie JDK, ja używam pakietu: OpenJDK Development Kit w wersji 7. Oznacza to, że jeżeli nie jesteś programistą Javy i nie używasz kompilatora tego języka na co dzień (czy w ogóle ;)) to najprawdopodobniej masz zainstalowane środowisko JRE (o ile masz zainstalowaną Javę), i będziesz musiał dokonać instalacji JDK przez uruchomieniem tego programu (jeżeli posiadasz już skompilowaną jego wersję, jeżeli kompilujesz program ze źródeł to i tak będziesz potrzebował JDK :)).

Pierwsze kroki

Program Fractal aktualnie został wyposażony w dwa interfejsy:

  • interfejs cmd - polecania dla programu przekazywane są za pomocą opcji linii poleceń, np.:

    ./fractal.sh -d fractals/f06.java -out f06.png

    powyższe polecenie spowoduje wygenerowanie grafiki f06.png przy wykorzystaniu wskazanego pliku (fractals/f06.java) z danymi wejściowymi.

    ./fractal.sh -h

    lista dostępnych z linii poleceń opcji programu.

  • interfejs graficzny można uruchomić poniższym poleceniem:

    ./fractal-gui.sh

Series

Series to "mechanizm" pozwalający na tworzenie serii grafik (plików graficznych) wg zadanych parametrów - np. przy zmieniającej się wartości skali dla której kolejne grafiki są przeliczane / tworzone. Pozwala to na stworzenie "klatek" filmu, które następnie można połączyć w sam film, np.: https://www.youtube.com/watch?v=cxWY01omX8Y, trochę dokładniejszy opis (dotyczący kodu w wersji 0.1, ale w większości jak najbardziej aktualny), można znaleźć tutaj: http://luka.sh/node/64.

Aktualnie projekt został mocno zmieniony w stosunku do wersji 0.1, do której pisane były prezentowane w "zoo" kody klas generujących grafiki (i kórej kod dostępny jest na portalu javaforge.com - linki poniżej) - z wersją >0.1 (czyli kodem udostępnianym na githubie) te klasy nie będą już niestety działać - wymagane są klasy pisane już z uwzględnieniem nowej architektury programu.

Linki