img/expr/title.jpg
EXPR

1.WSTĘP

Idea napisania programu EXPR pojawiła się w marcu 2008 roku. Wśród programów do rysowania funkcji, zauważyłem brak darmowych aplikacji, które spełniały by założenia niewielkiego rozmiaru, przenośności, interaktywności, szybkości działania, rozszerzalności. Założenia te można uznać za spełnione:

Oprócz wyświetlania funkcji, program umożliwia syntezę fali dźwiękowej opisanej danym wyrażeniem. Możemy też podłączyć mikrofon i modyfikować dźwięk wejściowy.
Obecną wersje programu oznaczam jako 0.91 (11.02.2009). Pliki do pobrania i link do galerii niżej.

Przykłady zastosowania programu

2.OBSŁUGA PROGRAMU

Krótki tutorial

Po uruchomieniu programu zobaczymy okno konsoli. Program domyślnie wykonuje wyrażenia zawarte w pliku autoexec.txt. Klawiszem [TAB] uaktywniamy listę funkcji i zmiennych dostępnych w programie. Naciskając klawisz [ENTER] program wkleja funkcje do pola edycji konsoli z odpowiednią ilością przecinków, które oddzielają argumenty funkcji (np. DIST(,)). Klawiszem [ESC] lub [TAB] wracamy do pola edycji i kontynuujemy wpisywanie wyrażenia (np. 2.5DIST(x,1)-3). Wielkość liter nie ma znaczenia. Po zatwierdzeniu enterem widzimy obliczoną wartość wyrażenia (w przykładzie będzie to 2.5DIST(x,1)-3=-0.5 ponieważ domyślnie zmienna x przyjmuje wartość 0, a DIST(x,y) zwraca pierwiastek z x*x+y*y).

Przechodząc do menu i wybierając File->Window->Graph, albo po prostu wciskając [F5], przechodzimy do okna wykresu. Podstawowe sterowanie to kursory, [PageUp]/[PageDown] do zmiany skali, oraz mysz. W zależności od pozycji kursora myszy, w lewym dolnym rogu widzimy wartości funkcji w danym punkcie. Jeśli w wyrażeniu występuje zmienna y, to jej wartość zależy od współrzędnej y kursora myszy. Bardziej zaawansowane opcje i ich skróty klawiszowe są opisane w pliku readme.txt, którego podgląd mamy pod klawiszem [F1] (powrót do wykresu to zawsze [F5], a do konsoli [F4]).

Klawisze [1]..[4] przełączają między trybami rysowania wykresu.
W domyślnym trybie [1] jest to rysowanie zwykłych funkcji typu y=f(x) na płaszczyźnie.
Tryb [2] to funkcje typu z=f(x,y) na płaszczyźnie. Program dla każdego punktu obrazu oblicza wartość funkcji od zadanych argumentów x i y, zaś z wyniku bierze tylko część ułamkową. Wartości 0 odpowiada kolor najciemniejszy, a wartości 1 najjaśniejszy. Przykładowo dla wyrażenia x otrzymamy pionowe paski w przejściu tonalnym, dla wyrażenia y podobnie, ale poziome paski, zaś np. dla
sin(dist(2sin(4x)+2.1cos(y),3cos(3y-sin(3x))-2sin(3x+cos(y))))^2
trzeci wykres przedstawiony na stronie głównej.

W trybie [3] przechodzimy do rysowania funkcji w 3D. Obliczona wartość wyrażenia odpowiada wysokości płaszczyzny. Każdemu punktowi, w klasycznym układzie współrzędnych (oś Z przebiega w głąb), odpowiada trójka (x,f(x,y),y).
Rozglądamy się za pomocą myszy. Lewy przycisk odpowiada za ruch do przodu, zaś prawy - do tyłu. Klawiszem [N] zwiększamy gęstość siatki (czy inaczej liczbę wierzchołków płaszczyzny). Dodatkowy wciśnięty klawisz [Shift] powoduje odwrócenie zmian, tzn. zmniejsza gęstość siatki. Podobnie w przypadku innych skrótów. Klawisz [Shift] powoduje także przyspieszanie zmian. Z resztą opcji proponuje zapoznać się samodzielnie, wykorzystując menu lub plik pomocy [F1].

W trybie 3D, wykresy mogą być wyświetlane następującymi metodami (w nawiasach kwadratowych skrót klawiszowy):

Program domyślnie wykorzystuje OpenGL, ale posiada również własny, softwarowy silnik renderujący. Jeżeli nasza karta graficzna wspiera Pixel Shader 2.0, oraz mamy na dysku biblioteki języka Cg (dołączone do programu), to dodatkowo otrzymujemy 4 techniki wyświetlania (ich aktywacja wymaga włączenia oświetlenia (klawisz [I]), zmiana technik klawiszem [~], wyłączenie: [Shift]+[~]):

Na tą chwilę ostatni tryb [4] umożliwia wyświetlanie funkcji opisanych równaniem parametrycznym. Rysowanie odbywa się w ten sposób: zmienna t przebiega od wartości t1 do wartości t2 przy zadanej ilości punktów. Współrzędne kolejnych punktów, które są łączone liniami, odpowiadają zmiennym x i y. Przykładowe wyrażenie PAR(2t,3sin(t)-2) odpowiada przypisaniu zmiennej x wartości 2t, a zmiennej y wartości 3sin(t)-2. Podobnie definiuje się inne funkcje. Funkcja POL(r) umożliwia odwzorowanie współrzędnych biegunowych na kartezjańskie gdzie argument r odpowiada promieniowi wodzącemu (np. dla POL(t) otrzymamy spiralę Archimedesa, a dla POL(1.5) okrąg o promieniu 1.5).

Klawisz [R] uaktywnia tryb powtarzania obliczeń. Domyślnie, po narysowaniu funkcji, komputer nie odświeża obrazu, dopóki nie poruszymy myszą lub nie wciśniemy jakiegoś klawisza. W trybie powtarzanie obliczeń, obraz jest na nowo odświeżany po każdym narysowaniu funkcji. Umożliwia to tworzenie animacji. Zmienna TIME przechowuje bieżący czas. Przykładowo, pisząc sin(x-time) otrzymamy przesuwającą się sinusoidę.

Tryb gry uaktywniamy klawiszem [B]. Wtedy zaczynają działać siły grawitacji, a przez płaszczyzny wykresu nie można swobodnie przenikać. Na tą chwile mamy do wyboru dwa modele fizyki: uproszczony oraz (domyślny) zaawansowany. Na tą chwilę ten drugi nie jest jeszcze do końca poprawny.

Jeśli chcemy wyświetlić kilka funkcji jednocześnie, musimy zmienić kolor rysowania (8 do wyboru w menu: File->Color lub skrótem Ctrl+[1]..[8]). Każde wprowadzone wyrażenie nadpisuje wprowadzoną wcześniej funkcje w tym samym kolorze. Klawiszem [TAB] w trybie wykresu/dźwięku zmieniamy aktualnie analizowaną funkcję. Możemy ją usunąć klawiszem [DEL].

Okno trybu dźwięku uaktywniamy klawiszem [F6] (lub odpowiednio wybieramy File->Window->Sound). Kursorami możemy modyfikować ustawienia miksera (głośność/balans), zaś z shiftem: natężenie i częstotliwość dźwięku. Przekazywanie wyrażeń do tego trybu odbywa się podobnie jak w trybie rysowania wykresów.

Rozszerzenia

Do programu dołączone są przydatne pluginy w plikach DLL, rozszerzające standardowy zbiór funkcji. Nowe funkcje mają w nazwie prefiks odpowiadający nazwie biblioteki.

Definiowanie własnych funkcji daje możliwość tworzenia listy wyrażeń oraz definiowania bardziej złożonych algorytmów zawierających instrukcje warunkowe oraz pętle. Przykładowo możemy napisać funkcję obliczającą wartość szeregu. Szerszy opis w pliku readme.txt.

Konsola

Konsola jest podstawowym narzędziem. To z niej wydajemy polecenia programowi. Warto podać tu kilka przydatnych uwag:

Plik konfiguracyjny

W pliku config.cfg możemy modyfikować szereg domyślnych opcji programu, między innymi domyślną rozdzielczość, palety kolorów, kolory światła, parametry fizyki w trybie gry. Możemy też uaktywnić takie opcje jak efekt przezroczystości (parametr GL_BLEND), czy mgłę (GL_FOG). Proponuje także przetestować opcje log oraz lightvec.

Pozostałe informacje

W pliku pomocy readme.txt znajdziemy między innymi opis sterowania programu, listę standardowych funkcji czy sposoby definiowania własnych funkcji. Z czasem znajdzie się tam więcej pomocnych informacji. Klawisz [F1] umożliwia podgląd tego pliku z programu.
Program opiera się na arytmetyce liczb 32-bitowych. Gwarantuje to szybkość działania, z drugiej strony dokładność obliczeń może, w pewnych zastosowaniach, okazać się niewystarczająca. Program nie był tworzony z myślą o zastosowaniach inżynierskich. Dokładność liczbowa wyników, a tym bardziej precyzja wykresów, jest w zupełności wystarczająca w zwykłych zastosowaniach. Jedynym mankamentem jest fakt, że w przy generowaniu dźwięku, nawet niewielkie odchylenia w precyzji obliczeń, są wyraźnie słyszalne. W przyszłości wersja 64-bitowa programu zniweluje te braki.

EXPR for SymbianOS (wersja 0.91 beta, kompilacja z dnia 16.02.2009)

Obecnie wersja programu EXPR na system Symbian OS 3rd Edition jest w fazie testowej, nie została jeszcze zakończona praca nad wersją finalną. Program pod względem funkcjonalności nie różni się praktycznie niczym od wersji na Windows (brakuje kilku opcji). Polecam przeczytać plik readme_symbian.txt w załączonym archiwum.
Przykładowe zdjęcia: 1 2 3 4 5 6 7 8 9

3.INFORMACJE TECHNICZNE

Wymagania sprzętowe

Ponieważ wymagania zależą tylko od celów, w jakich program zostanie użyty (do rysowania funkcji w 2D wystarczy zwykłe Pentium, bez akceleratora 3D), podaje wymagania sugerowane:

Program testowałem jedynie na WinXP, więc w razie problemów prosiłbym o informacje na ten temat. Również za zgłaszanie bugów byłbym wdzięczny. Kontakt na stronie O MNIE.

Rozwiązania techniczno-algorytmiczne

Planowany rozwój

Stan pracy nad projektem

Obecnie z powodu braku czasu (studia) zawiesiłem na razie pracę nad programem. Zapraszam jednak na stronę PROJEKTY PW gdzie znajdują się obecnie prowadzone projekty związane z moimi studiami.


Pliki do pobrania

Expr.zip
Program EXPR z pluginami DLL, plikiem pomocy, plikiem konfiguracyjnym oraz plikiem autoexec.txt zawierającym kilka przykładowych funkcji.

Expr+Cg.zip
Jak wyżej, ale archiwum zawiera biblioteki języka Cg, niezbędne do wyświetlania zaawansowanych efektów grafiki 3D.

ExprS60.zip
Wersja programu na system Symbian (czytaj wyżej).

Inne kompilacje programu (wersja 0.9):
expr_generic.exe
Podstawowa, najbardziej okrojona kompilacja programu
expr_noopengl.exe
Wersja programu bez OpenGL, oparta tylko na software'owym silniku graficznym
expr_nocg.exe
Wersja programu bez obsługi Cg

Tutorial w jaki sposób dodać do programu skybox'a:
envmap_tutor.zip

Dodatkowe pliki do programu (tekstury, czcionki, obiekty 3D, przykłady funkcji)
expr_extras.zip

Biblioteka MT.DLL zawierająca funkcje operujące na macierzach z przykładem wykorzystania
mt.zip

Źródła programu
exprsrc.zip - źródła wersji Win32
expr_s60src.zip - źródła wersji S60

Na koniec link do galerii obrazów wygenerowanych przez program EXPR:

GALERIA

[Do góry]

Valid XHTML 1.0 Transitional Poprawny CSS!

Copyright © Kamil Korolkiewicz 2009