Całkiem przypadkiem natrafiłem na ciekawy program do ogólnie pojętej obróbki matematycznej. Jak się później okazało, jest to program klasy MatLab z tym, że jest to program bezpłatny (niekomercyjny). Jak to bardzo często się odbywa, szukając czegoś znajdujemy coś całkiem innego, które przy bliższym zapoznaniu się staje się ciekawym i godnym uwagi. Tak i było w tym przypadku. Poszukiwałem algorytmów związanych z obrotami i rzutami w przestrzeni 3-wymiarowej i tak całkiem „przypadkiem” googiel wynalazł mi prelekcję omawiającą właśnie ten program. No i mnie wcięło...
Instalka jest do pobrania tu:https://www.gnu.org/software/octave/download.
Wspomniana wyżej pogadanka na temat programu Octave to:https://www.youtube.com/watch?v=2KEbWrtKBLI (trochę długie, ale warte obejrzenia, bo prezentowane koncepcje to po prostu kosmos).
Sama instalacja jest bezbolesna (tylko deko trwa). Co warte jest zaznaczenia, wraz z instalką jest „ogromny” manual (ponad 1000 stron do poczytania). Jak na razie, to jedynie dotknąłem czubka góry lodowej, a możliwości (i nadziei na fajną zabawę) jest cały ogrom.
Rzecz jasna, na początek zawsze jest coś prostego, a później w miarę jedzenia apetyt rośnie (no i program za tym nadąża). Te proste, to zaczerpnięte wprost z załączonej dokumentacji:
Kod: Zaznacz cały
subplot (2, 1, 1)
fplot (@sin, [-2*pi, 4*pi]);
subplot (2, 1, 2)
fplot (@cos, [-2*pi, 4*pi]);
Przykład jest wręcz trywialny, ale pokazuje prostotę działań w celu uzyskania zamierzonego efektu.
Skoro tak łatwo jest uzyskać przebieg funkcji, to może coś bardzie fajnego. Padło na drgania gasnące. No więc wystarczy:
Kod: Zaznacz cały
clear all ;
close all ;
clc ;
x = linspace ( 0 , 4 * pi , 500 ) ;
for i=1 : 500
y ( i ) = exp ( - 0.4 * x ( i ) ) * sin ( 5 * x ( i ) ) ;
end ;
plot(x, y);
grid on;
Całkiem przypadkiem mi wyszło, że krzywą płaską można sobie pooglądać z różnych stron, czego całkiem się nie spodziewałem.
Jak wspomniałem już wcześniej coś na temat apetytu, to... (cytując Pawlaka z „Kochaj albo rzuć”: nadeszła wiekopomna chwila na… powierzchnie w przestrzeni). Tak trochę musiałem się podrapać po głowie, by wymyślić jakąś fajną powierzchnię. Stanęło na czymś takim:
W zapisie dla Octave to:
Kod: Zaznacz cały
clear all;
close all;
clc;
N = 101;
x = linspace(-5, 5, N);
y = linspace(-5, 5, N);
[XX, YY] = meshgrid(x, y);
for i=1:N
for j=1:N
ZZ(i,j)=10*exp(-0.5*sqrt(x(i)^2 + y(j)^2))*cos(4*sqrt(x(i)^2 + y(j)^2));
end
end;
surf(XX, YY, ZZ);
No więc „ten koń” zaprzęgnięty do pracy daje następujący wynik:
Rzecz jasna, można sobie to poobracać:
popatrzeć na to prawie z góry:
popatrzeć na to praktycznie z boku:
i zajrzeć od spodu:
Tak całkiem przypadkiem odkryłem (to znaczy program to miał, a odkryłem przypadkiem), że tą powierzchnię można sobie przesunąć do krawędzi i to co „wychodzi” poza jest obcinane. Powstaje coś na kształt przekroju i tu całkiem fajnie widać, że to jest gasnący przebieg fali. W tym przypadku jest to cosinus.
Jak zamienić funkcję cos na sin, to zamiast „piku do nieba” na środku, jest dziurka (jak „przekroić” przez środek, to widać):