Strona główna

DHTML i JavaScript

w matematyce i w fizyce


To oczywiście żart.
JavaScript ma bardzo ograniczone możliwości,
właśnie ze względów bezpieczeństwa.

Generator wykresów
- równania drugiego stopnia
Badanie funkcji
wielomianowych
SUPERKALKULATOR
- arytmetyka o dowolnej precyzji
Demonstracja ruchu
w polu grawitacyjnym
Zobacz przykład Zobacz przykład Zobacz przykład Zobacz przykład

Dynamiczny HTML, jak wiadomo, umożliwia tworzenie stron WWW modyfikujących dynamicznie - w odpowiedzi na działanie oglądającego stronę - treść źródłową ściągniętego z serwera i interpretowanego przez przeglądarkę dokumentu HTML (bez konieczności ponownego łączenia się z serwerem). Realizowane to jest m.in. za pomocą języków skryptowych i arkuszy stylów. Mechanizmy te są obsługiwane przez aktualnie używane przeglądarki i nie jest do tego konieczne instalowanie specjalnych dodatków (plug-ins, kontrolki ActiveX i inne).
W dziale dotyczącym szachów metody te wykorzystano przy prezentacji partii szachowych ( Debiuty szachowe i Miniatury szachowe ).
Przedstawione poniżej przykłady prezentują wykorzystanie tej technologii dla demonstracji niektórych zagadnień z matematyki i fizyki.


Generator wykresów Przykład
Przykład ukazuje zastosowanie DHTML do dynamicznego tworzenia wykresów funkcji kwadratowych, o których mowa w dziale "Elipsa, parabola, hiperbola". Duża część skryptu realizującego to zadanie, ma na celu tylko dokonanie przeliczeń, pozwalających na określenie, co równanie typu
Ax2 + Bx + Cy2 + Dy + E = 0

przedstawia i przekształcenie tego równania do postaci kanonicznej.

Samo utworzenie wykresu sprowadza się do określenia jego skali i położenia w ramce na ekranie oraz wstawienia za pomocą metod JavaScript ( nazwa_znacznika.innerHTML='treść kodu HTML' ) odpowiednich tagów w dokumencie HTML powodujących wyświetlenie żądanych elementów wykresu w odpowiednich miejscach.
Utworzenie wykresów okręgów, elips oraz prostych typu  y = a  i  x = a  następuje stosunkowo szybko, gdyż elementy te wyświetlane są jako przygotowane rysunki okręgu (po odpowiednim przeskalowaniu) lub prostych.
Wykreślenie wykresów paraboli lub hiperboli trwa nieco dłużej, gdyż dla każdego z kilkuset punktów krzywej tworzony jest i wstawiany w kodzie HTML odpowiedni tag typu:

<P STYLE="position: absolute; left: xxx; top: yyy">.</P>

W wyrażeniu tym istotną rolę spełnia jeden znak tekstowy, mianowicie zwykła kropka (.). Z takich właśnie kropek tworzony jest cały rysunek krzywej (JavaScript, niestety nie posiada funkcji graficznych).

Współczynniki w równaniu przekształconym do postaci kanonicznej, dla zwiększenia czytelności, są w większości wypadków tylko przybliżeniami (aby nie operować pierwiastkami lub piętrowymi ułamkami).



Badanie funkcji wielomianowych Przykład
Tutaj również tworzony jest wykres funkcji, w tym przypadku funkcji będącej wielomianem maksymalnie piątego stopnia. Głównym zagadnieniem w tym przykładzie jest jednak określenie charakterystycznych elementów zadanej funkcji: miejsc zerowych, ekstremów, punktów przegięcia. Realizuje to zadanie algorytm w Java Script.
Dla wielomianów wyższych stopni poszukiwanie odpowiednich wartości (miejsc zerowych funkcji lub jej pochodnych) dokonywane jest metodą kolejnych przybliżeń i nie jestem pewien, czy w jakimś szczególnym przypadku nie uzyska się niepoprawnego wyniku (będę wdzięczny za informację o takim wypadku).
Obliczone współrzędne charakterystycznych punktów są tutaj też w większości wypadków zaokrąglane do kilku cyfr znaczących.



Superkalkulator Przykład
Dokładność obliczeń na komputerze jest dosyć znacznie ograniczona. Związane to jest głównie z konstrukcją procesora oraz organizacją pamięci w komputerze. W programach możemy z reguły stosować liczby co najwyżej 8-bajtowe (typu QWORD - poczwórne słowo), tzn. o ok. piętnastu cyfrach znaczących.
Przedstawiony w przykładzie kalkulator umożliwia wykonywanie 4-ech podstawowych działań arytmetycznych na liczbach o dowolnej długości i teoretycznie nieograniczonej dokładności wyniku.
Możliwe to jest dlatego, że programik napisany w JavaScript nie operuje np. na 100-cyfrowych liczbach, lecz 100-elementowych ciągach znakowych (obiektach typu string, nie posiadających takich ograniczeń jak liczby). Wpisywane przez nas w polach textarea liczby są odczytywane i traktowane przez program jako "napisy", a poszczególne cyfry jako zwykłe znaki tekstowe (litery).

Aby kalkulator tworzył na podstawie dwóch "napisów" prawidłowy trzeci "napis" należało zbudować całą "arytmetykę znakową". Jeśli chodzi o dodawanie i odejmowanie to jest to dosyć prostą rzeczą. Tylko nieco bardziej skomplikowana jest "tabliczka mnożenia", ale przy pisaniu procedur dzielenia trzeba było się już trochę pogimnastykować.
Wspomniałem wyżej o teoretycznie nieograniczonej dokładności wyniku (dotyczy to dzielenia). Dokładność ta praktycznie jest ograniczona nie tylko sprzętowo (może zabraknąć pamięci w komputerze) ale i czasowo. Szybkość działania programu napisanego w JavaScript nie jest imponująca i niezbyt nadaje on się np. do próby pobicia rekordu w obliczaniu liczby pi (patrz: "Obliczanie liczby pi").



Ruch w polu grawitacyjnym Przykład
Prawo grawitacji, rządzące ruchami ciał niebieskich, sformułowane zostało przez Newtona przed ponad trzema wiekami (patrz: "Fizyka - hiperprzestrzeń"). Zgodnie z tym prawem ciała oddziaływują na siebie z siłami odwrotnie proporcjonalnymi do kwadratu odległości między nimi. Pod działaniem tych sił obiekty poruszają się ruchem przyśpieszonym, ale wielkość tego przyśpieszenia ciągle się zmienia, gdyż zmieniają się odległości (dla ruchu jednostajnie przyśpieszonego wystarczyłoby stosować znane wzory typu: s = v0.t + 1/2.a.t2).

Obliczenie ruchu dwóch ciał, wzajemnie oddziaływujących grawitacyjnie, jest stosunkowo prostym zadaniem, natomiast przez ponad trzysta lat nie zdołano znaleźć ogólnego rozwiązania ruchu trzech obiektów ("problem trzech ciał"). Ścisłe rozwiązanie tego zadania otrzymano tylko w niektórych szczególnych wypadkach (ciała poruszają się w jednej płaszczyźnie i masę jednego z nich można pominąć w porównaniu z masami pozostałych dwóch).

Przykład ukazuje, oczywiście z pewnym przybliżeniem, ruch ciał w polu grawitacyjnym. Zagadnienie jest tutaj też uproszczone: obiekty poruszają się w jednej płaszczyźnie.
Skrypt przelicza i zmienia prędkości i położenia obiektów, ale czyni to, co zrozumiałe, nie w sposób ciągły, lecz skokowo, w określonych odstępach czasowych. Wykorzystywana jest do tego metoda JavaScript:

setInterval(nazwa_procedury,odstęp_czasowy,argumenty)

Odpowiednie parametry w procedurze dobrane zostały w ten sposób, że przeliczanie prędkości i położeń obiektów dokonywane jest co 1/25000 "roku astronomicznego" (co ok. 20 minut). Ten interwał czasowy przy dużych odległościach między obiektami nie ma specjalnego znaczenia, ale może powodować znaczące błędy przy małych odległościach i dużych prędkościach.

Wyświetlanie trajektorii ruchu przez dłuższy okres czasu powoduje spowolnienie działania demonstracji (coraz większa liczba tagów HTML, wyświetlających poszczególne punkty trajektorii, jest wstawiana do dokumentu) i można wtedy zatrzymać, a następnie powtórnie uruchomić wyświetlanie tras ruchu.





do góry


stat4u