![]() |
![]() |
![]() |
Skrypty DGS - najprostsze przykłady |
Aby otworzyć skrypt Guile należy rozpocząć od wybrania narzędzia do tworzenia skryptów DGS,
dostępnego w menu "Miary", lub z menu kontekstowego, ukrytego pod prawym przyciskiem myszy. Skrypt Guile może pobierać od 0 do
n parametrów wejściowych (n - liczba naturalna).
Po wyborze narzędzia należy kliknąć na obiekcie, który ma posłużyć skryptowi jako parametr wejściowy (można kliknąć po kolei
kilka obiektów - skrypt zapamięta parametry w kolejności ich wyboru), nastepnie zaś, jeśli uznamy że wybór parametrów dla
skryptu został zakończony - kliknąć gdziekolwiek w obszarze roboczym ekranu - to miejsce będzie miejsce zadokowania skryptu
na ekranie. Położenie skryptu zawsze możemy zmienić używając narzędzia do przesuwania elementów na ekranie - zmiana
położenia nie zmieni w żaden sposób działania skryptu, może jedynie poprawić wygląd ilustracji.
Dobrą forma nauki tworzenia skryptów Guile jest praca z kilkoma konkretnymi przykładami - wówczas potęga skryptów i ich
funkcjonalność jest dużo łatwiejsza do zrozumienia. Skrypty w Dr.Genius, podobnie jak makrokonstrukcje, nadają programowi
szczególne znaczenie - pozwalają mianowicie wykonać operacje, których nie przewidzieli (lub nie chcieli przewidzieć) Autorzy
programu 1. Dają możliwość programowania w Dr.Genius - co jest ogromnym
atutem programu. Bardzo istotne jest to, że DGS rozpoznaje ogromną część narzędzi interpertera GNU Guile, szczególnie w
przypadku funkcji 2. Działanie tych funkcji zostało dokładnie
przetestowane - można stwierdzić że DR.Genius wyjątkowo dobrze współpracuje z tego typu bibliotekami Guile.
Tworząc taki skrypt pamiętać należy, że po wybraniu narzędzia tworzenia skryptu DGS nie można klikać na żadnym obiekcie, tylko w obszarze roboczym, a którym żąden taki obiekt się nie znajduje ("wolne miejsce"). Skrypt zostanie zadokowany w miejscu kliknięcia. W przeciwnym przypadku, jeżeli przez omyłkę klikniemy obiekt - Dr.Genius przyjmie, że jest to obiekt wejściowy dla skryptu 3. Po zadokowaniu skryptu zobaczymy na ekranie migający napis "Dr.Genius". Taki napis oznacza, że użytkownik może przystąpić do tworzenia skryptu, który na razie jest "pusty" - nie zawiera żadnych poleceń. Skrypt jest takim samym obiektem jak inne - edycji podlegają jego właściwości (tekst) oraz styl (wygląd na ekranie). Aby utworzyć skrypt wybieramy narzędzie do ustalania właściwości obiektu i klikamy napis "Dr.Genius". Na ekranie pojawi się okno edycji skryptu:
Utworzymy prosty generator liczb losowych. W oknie skryptu wpiszemy następujący kod:
(random 10)i zatwierdzamy skrypt, klikając OK. Jeżeli chcemy pozostawić okno edycyjne otwarte i zapisać częściowe zmiany - klikamy przycisk Zastosuj. W przypadku jakichkolwiek zmian na ekranie (kształt dowolnego obiektu, zmiana położenia itd.) skrypt wygeneruje liczbę losową, całkowitą, z przedziału [0, 10). Gdybyśmy zamiast liczby całkowitej chcieli otrzymać liczbę z przedziału [0,1) zapisujemy:
(random:uniform)
Na przykład: aby obliczyć przybliżoną wartość liczby Pi napiszemy:
(acos -1)W przypadku liczby E natomiast:
(exp 1)
Wartości numeryczne, generowane przez skrypty Guile w Dr.Genius są o tyle użyteczne, o ile użyteczne są wartości numeryczne generowane przez program w ogóle. W rozwiązywaniu takich drobnych problemów skrypty mogą być bardzo pomocne. Należy jednak pamiętać, że nie jest to ich główne zadanie. Mogą bowiem zostać wykorzystane do bardzo ciekawych zastosowań, o ile posiadają przynajmniej jeden parametr wejściowy.
Procedura postępowania przy tworzeniu skryptu z parametem jest praktycznie taka sama. Po wybraniu narzędzia tworzenia skryptu DGS klikamy obiekt, który ma byc parametrem wejściowym, następnie zaś klikamy w dowolnym miejscu na ekranie, gdzie chcemy zadokować skrypt. Parametr wejściowy zostaje zapamiętany przez skrypt pod nazwą a1. Jeżeli wprowadzimy kilka parametrów wejściowych to - w kolejności ich wskazywania - program zapamieta je pod nazwami (odpowiednio) a1, a2... etc.
W zależności od typu przedmiotu, wybranego jako parametr dla skryptu - używamy rozmaitych metod do przekazania skryptowi wartości czy współrzędnych obiektu... Omówienie tych metod znajduje się w seksji Obiekty i metody w DGS W dalszym ciągu będziemy stopniowo konstruować fragment krzywej, będącej wykresem funkcji oraz stycznej do tej krzywej w punkcie, poruszającym się po skonstruowanym fragmiencie krzywej. Ostateczna wersja konstrukcji znajduje się w katalogu /usr/share/drgenius/examples/slope.drgenius.
Nową konstrukcję rozpoczynamy od wykreślenia dwóch punktów i odcinka, którego końcami będą te dwa punkty. Następnie na odcinku umieszczamy swobodny punkt, który nazwaliśmy "Move me!" (przesuń mnie). Ten punkt będzie służył jako łącznik ze skryptem. Ponarysowaniu i opisaniu punktu tworzymy skrypt DGS z jednym paramtrem wejściowym.
Gdy a1 jest odwołaniem do punktu "Move me!" - następujący skrypt zwróci wartość dziesiętną z przedziału [-10,10]:
(define x (getAbscissa a1)) (* 20 (- x 0.5))Niezbędne są dodatkowe wyjaśnienia.
Wartość obliczona w poprzednim skrypcie posłuży nam jako argument dla funkcji, ktorej fragment wykresu będziemy teraz rysować. W następnym kroku wyznaczymy wartości funkcji x -> cos(x).
(define x (getValue a1)) (cos x)Wywołanie (getValue a1) służy do pobrania wartości obliczonej w poprzednim skrypcie czyli argumentu dla funkcji, poczhodzącego z przedziału [-10,10]). Następnie obliczamy wartość funkcji - (cos x) i ta wartość, jako że znajduje się w ostatniej linii skryptu zostaje zapamiętana jako wynik działania skryptu. Nazwijmy ten drugi skrypt Y0.
W kolejnym wyświetlamy na ekranie punkt o współrzędnych (X0,Y0), korzystając z narzędzia punkt o danych współrzędnych. Ten punkt należy do wykresu funkcji x->cos(x), w przedziale [-10,10]. Nazwijmy punkt Mo. Ostatnim krokiem jest wykreślenie miejsca geometrycznego punktów Mo w zależności od położenia punktu "Move me!". Aby to wykonać nalezy wybrać narzędzie miejsce geoemetryczne, następnie kliknąć najpierw punkt "Move me!", potem zaś punkt Mo. I w ten sposób narysowaliśmy w Dr.Genius... wykres funkcji !!!
ABy wykreślić styczną do krzywej w danym punkcie (linię prostą) potrzebujemy przede wszystkim wartości pochodnej funkcji w tym punkcie. Ta wartość jest równa współczynnikowi kierunkowemu stycznej do wykresu funkcji w danym punkcie. Pochodną funkcji x->cos(x) jest funkcja x->-sin(x). Interesuje nas wartość -sin(X0). Tworzymy skrypt z jednym parametrem wejściowym. Parametrem w tym wypadku jest wartość zwrócona przez skrypt X0:
(- 0 (sin (getValue a1)))Stosujemy, jak poprzednio prefiksową notację odwrotną. Nazwijmy nowy skrypt "Slope at Mo". Gdy zmienimy położenie punktu "Move me!" wartość zwracana przez nowy skrypt zostanie automatycznie zaktualizowana.
Teraz spróbujemy wyświetlić styczną do wykresu funkcji w punkcie X0. Ponieważ jest to linia prosta - potrzebujemy do jej wyświetlenia dwóch punktów. Na razie mamy do dyspozycji współrzędne punktu styczności (X0,Y0). Wyznaczmy współrzędne drugiego punktu.
Zacznijmy od odciętej drugiego punktu. Niech na przykład X1 = X0 + 2. Jeśli tak - tworzymy kolejny skrypt z jednym parametrem wejściowym, w tym wypadku X0:
(define x1 (getValue a1)) (+ x1 2)Nazwijmy skrypt X1.
Przejdźmy do obliczenia rzędnej punktu X1. Będą nam potrzebne następujące wartości:
W następującym skrypcie obliczamy wartość rzędnej punktu X1, stosując następujący wzór: Y0 + m*(X1 - X0), gdzie m oznacza współczynniki kierunkowy stycznej, czyli w naszym wypadku "Slope at Mo". Pozostałe oznaczenia nie wymagają dodatkowych objaśnień.
(define x0 (car (getCoordinates a1))) (define y0 (cadr (getCoordinates a1))) (define m (getValue a2)) (define x1 (getValue a3)) (+ (* m (- x1 x0)) y0)Kilka słów wyjaśnienia na temat nowych metod, użytych w tym skrypcie:
Ostatnim etapem będzie wyświetlenie punkt M1 o współrzędnych (X1, Y1) - korzystamy z narzędzia punkt o danych współrzędnych i narysowanie linii prostej przechodzącej przez punkty Mo i M1 - korzystamy z narzędzia linia prosta
Oczywiście, zamiast użycia tak dużej ilości prostych i krótkich skryptów można by było użyć jednego lub dwóch skryptów bardziej skomplikowanych. Mamy jednak nadzieję, że ten szczegółowy opis zachęci trochę do tworzenia własnych skryptów DGS, do eksperymentowania i pomoże początkującym.
![]() |
![]() |
![]() |
Skrypty DGS - najprostsze przykłady |