A jednak się kręci!

W ubiegłym miesiącu zajmowaliśmy się wirtualnym życiem toczącym się w kostkach RAM naszego komputera - algorytmami genetycznymi, które są jedną z nadziei m.in. na odkrycie sztucznej inteligencji. Dzisiaj zejdziemy na ziemię i opowiemy o czymś zupełnie innym.

W ubiegłym miesiącu zajmowaliśmy się wirtualnym życiem toczącym się w kostkach RAM naszego komputera - algorytmami genetycznymi, które są jedną z nadziei m.in. na odkrycie sztucznej inteligencji. Dzisiaj zejdziemy na ziemię i opowiemy o czymś zupełnie innym.

Rysunek 1. Wahadło musi być stosunkowo ciężkie, żeby mogło zmagazynować jak najwięcej energii i drgać jak najdłużej. Proponuję wykorzystać jak największy ołowiany ciężarek wędkarski, używany do tak zwanych połowów gruntowych. Ciężarek taki z łatwością i za grosze dostaniemy w każdym sklepie wędkarskim. Na ciężarku naklejamy punkt-znacznik, na którym skoncentruje się oko kamery.

Rysunek 1. Wahadło musi być stosunkowo ciężkie, żeby mogło zmagazynować jak najwięcej energii i drgać jak najdłużej. Proponuję wykorzystać jak największy ołowiany ciężarek wędkarski, używany do tak zwanych połowów gruntowych. Ciężarek taki z łatwością i za grosze dostaniemy w każdym sklepie wędkarskim. Na ciężarku naklejamy punkt-znacznik, na którym skoncentruje się oko kamery.

Każde dziecko wie - choćby z najprostszych obserwacji astronomicznych czy z opowiadań mamy, że Ziemia się kręci... Czy jednak ruch Ziemi potrafimy wykryć bezpośrednim doświadczeniem, przeprowadzonym w naszym mieszkaniu? Nie będzie to proste, bo Ziemia kręci się powoli. Będziemy potrzebowali komputera, kamery internetowej i odrobiny umiejętności programistycznych oraz technicznych.

Foucault swoje doświadczenie wykonał w Paryżu w 1851 roku. Jego potężne wahadło miało 70 metrów długości i wykonywało jedno drgnienie w 17 sekund. Ważyło prawie 30 kg i raz pchnięte mogło wahać się całymi godzinami.

Poruszone wahadło regularnie zmienia swoją płaszczyznę drgań (wyznaczoną przez jego nić), bo Ziemia się kręci. Najprościej zrozumieć przyczynę tego zjawiska, wyobrażając sobie wahadło drgające na biegunie. Ziemia pod takim wahadłem obraca się i płaszczyzna drgań zrobi pełny obrót w ciągu doby.

Rysunek 2. W plastikowej obudowie bardzo silnego magnesu do czyszczenia akwarium wywiercono najmniejszą dziurkę, przez którą dało się przewlec nitkę wahadła. Nitkę unieruchomiono kroplą doskonałego kleju, a magnes przyklejono do górnej framugi drzwi. Przy niewielkich amplitudach drgań nie ma mowy o poślizgu nitki w miejscu zawieszenia, jak zapewne byłoby po zawieszeniu na haku czy gwoździu.

Rysunek 2. W plastikowej obudowie bardzo silnego magnesu do czyszczenia akwarium wywiercono najmniejszą dziurkę, przez którą dało się przewlec nitkę wahadła. Nitkę unieruchomiono kroplą doskonałego kleju, a magnes przyklejono do górnej framugi drzwi. Przy niewielkich amplitudach drgań nie ma mowy o poślizgu nitki w miejscu zawieszenia, jak zapewne byłoby po zawieszeniu na haku czy gwoździu.

Wahadło zawieszone na równiku nie będzie zmieniało płaszczyzny swoich drgań, bo oś obrotu byłaby tam akurat prostopadła do linii pionu. Z kolei w naszej szerokości geograficznej pełny obrót płaszczyzny drgań wymaga dłuższego czasu niż doba. Nie będziemy dyskutować o stronie fizycznej zagadnienia, ale zależność czasu pełnego obrotu płaszczyzny drgań od położenia na Ziemi jest następująca:

T = 24 godziny / sin( fi);

Wyprowadzenie tego wzoru znajdziemy w akademickich podręcznikach mechaniki, a kąt fi oznacza tutaj szerokość geograficzną miejsca na Ziemi, w którym przeprowadzamy eksperyment. Widzimy z tej zależności, że wahadło na biegunie (gdzie sin( fi) = 1) całkowicie zmieni płaszczyznę drgań w ciągu doby, a wahadło na równiku (sin( fi) = 0) obróci swój kierunek drgań w ciągu czasu nieskończonego, czyli płaszczyzna drgań będzie stała w miejscu.

Na pierwszy rzut oka problem wygląda na niezbyt złożony - zawiesimy gdzieś u sufitu wahadło, pchniemy je, wygodnie usiądziemy w fotelu i będziemy obserwować, jak pod nim obraca się Ziemia. Wahadło drgające wzdłuż jakiejś deski podłogowej czy krawędzi jakiegoś mebla po chwili powinno zmienić kierunek tych drgań, bo mieszkanie wraz z całą planetą w tym czasie odjechało... Ale to wszystko nie jest takie proste.

Rysunek 3. Wahadło wykonuje niewielkie drgania, a znajdująca się pod nim kamera rejestruje barwny punkt, przyklejony pod ciężarkiem. Odległość między kamerą a wahadłem powinna być tak wyregulowana, żeby obraz drgań znajdował się w centrum kadru, a same drgania na obrazie początkowo odbywały się w kierunku poziomym (potem kierunek będzie się powoli zmieniał).

Rysunek 3. Wahadło wykonuje niewielkie drgania, a znajdująca się pod nim kamera rejestruje barwny punkt, przyklejony pod ciężarkiem. Odległość między kamerą a wahadłem powinna być tak wyregulowana, żeby obraz drgań znajdował się w centrum kadru, a same drgania na obrazie początkowo odbywały się w kierunku poziomym (potem kierunek będzie się powoli zmieniał).

W naszej szerokości geograficznej pełny obrót płaszczyzny drgań (czyli o 360 stopni) wymaga czasu:

T = 24 godziny / sin( 50 stopni) = 31 godzin

W ciągu godziny płaszczyzna drgań wahadła powinna zatem zakreślić kąt:

alfa = 360 stopni / 31 godzin = 12 stopni

Rysunek 4. Doświadczenie będzie trwało co najmniej kilkanaście minut. Raz pchniętego wahadła nie można już dotykać czy w inny sposób korygować. Zestaw musi być mocny i stabilny, w pokoju nie może być przeciągów, nikt nie powinien dookoła biegać czy w jakikolwiek sposób zakłócać swobodnych drgań.

Rysunek 4. Doświadczenie będzie trwało co najmniej kilkanaście minut. Raz pchniętego wahadła nie można już dotykać czy w inny sposób korygować. Zestaw musi być mocny i stabilny, w pokoju nie może być przeciągów, nikt nie powinien dookoła biegać czy w jakikolwiek sposób zakłócać swobodnych drgań.

To niewiele, biorąc pod uwagę, że na taki obrót musielibyśmy czekać przez godzinę. A wszystko przez to, że Ziemia kręci się powoli! Czy nasze wahadło zechce swobodnie drgać przez całą godzinę? Czy po godzinie będziemy jeszcze mogli wyznaczyć kierunek jego drgań? Z pewnością nie - nasze małe, domowe wahadełko najprawdopodobniej zatrzyma się już po kilkunastu minutach. To dlatego wahadło Foucaulta było bardzo długie i bardzo ciężkie - takie drgają bardzo wolno, bardzo długo i niewiele przeszkadzają im różne siły hamowania, oporu, tarcia. Nasze wahadło szybko się zatrzyma i kąt obrotu płaszczyzny jego drgań będzie za mały, żeby go wyznaczyć domowym sposobem.

Od czego jednak mamy swoje wspaniałe komputery? Oto nasz plan:

1. Wahadło zawiesimy nad kamerą i będziemy je od dołu filmować krótko (powiedzmy pięć sekund) co pewien czas (powiedzmy co 5 minut). Cały sprzęt będzie, oczywiście, stabilny i całkowicie unieruchomiony.

2. Po zakończeniu eksperymentu porównamy filmy ze sobą - płaszczyzna drgań wahadła powinna zmieniać orientację. Ślad wahadła, pozostawiony na poszczególnych filmach, powinien bardzo subtelnie zmieniać kierunek.

W tym eksperymencie komputer z kamerą będzie rejestratorem danych doświadczalnych. Po zarejestrowaniu danych (czyli po wykonaniu kilku pięciosekundowych filmów), przystąpimy do analizy tych danych. Z każdego filmu wydobędziemy zbiór punktów-pozycji drgającego wahadła i zbadamy, czy i jak te pozycje się przemieszczają.

Zacznijmy od przygotowania wahadła. Duży ciężarek wędkarski oznaczamy dobrze widocznym, kontrastowym punktem, którego przemieszczanie będziemy śledzić kamerą (rysunek 1). Możemy obserwować tylko kanał czerwieni (lub innej barwy) - dlatego w celu eliminacji błędnych rejestracji barwny punkt powinien mieć kolor jak najbardziej odległy od koloru tła, ścian, ciężarka, oświetlenia itp. Potem przywiązujemy do ciężarka mocną nić i wszystko zawieszamy jak najwyżej. Dlaczego? Bo długie wahadła drgają wolniej, a tym samym wolniej tracą energię. Najlepiej byłoby zawiesić wahadło w jakiejś wieży, kościele, hali...

Rysunek 5. Sumy amplitud pikseli, wyznaczone wzdłuż zaznaczonych tutaj kierunków, są największe. Kierunki te nie przechodzą jednak przez środek plamki, czego należałoby oczekiwać, bo szumy zafałszowały odczyt. Dlatego najpierw usuwamy szumy za pomocą tzw. algorytmu progowania.

Rysunek 5. Sumy amplitud pikseli, wyznaczone wzdłuż zaznaczonych tutaj kierunków, są największe. Kierunki te nie przechodzą jednak przez środek plamki, czego należałoby oczekiwać, bo szumy zafałszowały odczyt. Dlatego najpierw usuwamy szumy za pomocą tzw. algorytmu progowania.

Górne zawieszenie wahadła okazuje się niezwykle istotną sprawą (rysunek 2). Musi to być system całkowicie symetryczny - to znaczy zawieszenie nie może trochę inaczej pracować przy drganiach w różnych kierunkach. Wahadło zawiązane na wygiętym w hak gwoździu szybko zacznie wykręcać elipsy i trudno będzie zlokalizować płaszczyznę jego drgań. Dobrze zawieszone, długie i ciężkie wahadło powinno drgać przynajmniej przez kilkanaście minut. W tym czasie nie może nastąpić istotna eliptyzacja kierunków drgań, dzięki czemu łatwo będzie obserwować powolny obrót płaszczyzny tych drgań.

Oczywiście mechanizm z magnesem nie jest jedynym rozwiązaniem - jestem pewien, że wymyślą Państwo znacznie lepsze systemy, i to nie dysponując halą fabryczną czy kościołem.

Pod wahadełkiem ustawiamy kamerę (uwaga - niech ciężarek nie urwie się z nitki!) i tak regulujemy wzajemne ustawienia przestrzenne, aby w kadrze widzieć drgania w kierunku poziomym. Dlaczego w kierunku poziomym? Nie ma to znaczenia dla zjawiska, ale nieco ułatwi późniejszą analizę numeryczną - punkty zarejestrowane przez kamerę opiszemy za pomocą równania poziomej prostej, która będzie powoli przechodziła do pionu.

Pora usiąść przed komputerem. Wprowadzamy wahadełko w niewielkie drgania, bierzemy do ręki zegarek i w regularnych odstępach czasu nagrywamy krótkie, kilkusekundowe filmy. Zapisując filmy na dysku, dbajmy o ich nazwy, żeby później móc rozszyfrować, z którego momentu pochodzi dany film. W załączonych materiałach źródłowych znajduje się seria siedmiu filmów. Po wprawieniu wahadła w niewielkie oscylacje kamera była włączana co 5 minut na ok. 15 sekund. Oznacza to, że podczas półgodzinnego cyklu pomiarowego nagrałem siedem 15-sekundowych filmów, które były przedmiotem dalszej analizy. Każdy film był realizowany z częstotliwością 10 klatek na sekundę, zatem jedna 15-sekundowa próbka pomiarowa, z której należało wyznaczyć bieżący kierunek drgań, składała się z blisko 150 danych położeniowych (x,y).

W pomieszczeniu było stosunkowo ciemno, ale spód wahadła został intensywnie oświetlony, dzięki czemu zredukowano czas naświetlania (czas otwarcia migawki kamery) i poszczególne obrazy, składające się na filmy, nie wykazywały istotnego poruszenia.

Rysunek 6. Aplikacja operuje komponentem MediaPlayer, wyświetlając w pętli klatka po klatce wszystkie kadry filmu. Wyświetlony obraz najpierw jest poddawany prostemu filtrowaniu, potem następuje wyszukanie współrzędnych plamki, przeskalowanie ich do przestrzeni fizycznej i zapisanie w pliku tekstowym albo w schowku.

Rysunek 6. Aplikacja operuje komponentem MediaPlayer, wyświetlając w pętli klatka po klatce wszystkie kadry filmu. Wyświetlony obraz najpierw jest poddawany prostemu filtrowaniu, potem następuje wyszukanie współrzędnych plamki, przeskalowanie ich do przestrzeni fizycznej i zapisanie w pliku tekstowym albo w schowku.

W tym momencie kończymy przeprowadzanie eksperymentu i przystępujemy do opracowania otrzymanych danych. Zaczniemy od wydobycia z każdego filmu zestawu współrzędnych wahadełka. W załączonych materiałach znajduje się program, który wyświetla każdą klatkę filmu, wyszukuje na niej jaśniejszą plamkę wahadła i współrzędne uzyskane z każdej klatki zapisuje w pliku lub w schowku systemowym. Powiedzmy zatem, jak działa taki program.

W środowiskach Delphi i Builder znajduje się gotowy komponent o nazwie MediaPlayer, który potrafi odczytać z dysku film w pospolitym formacie AVI i wyświetlić konkretną klatkę we wskazanym okienku. Gdy klatka jest wyświetlona, algorytm oblicza dwa wektory wartości - sumę amplitud wszystkich pikseli w kierunkach pionowych i poziomych. Potem wyznacza maksima w wektorach sum pionowych i poziomych. Maksima te odpowiadają położeniu "najgrubszego" miejsca plamki, pozostawionej przez wahadełko.

Rysunek 7. Każda klatka filmu dostarcza danych o położeniu wahadełka w postaci współrzędnych (x,y). Dane te aproksymujemy linią prostą w procedurze zwanej regresją liniową. Jeśli nakręciliśmy siedem filmów, mamy siedem równań prostych i dalszej obserwacji poddajemy siedem ich współczynników kierunkowych. Czy dryf tych współczynników wskazuje na obrót Ziemi pod wahadełkiem?

Rysunek 7. Każda klatka filmu dostarcza danych o położeniu wahadełka w postaci współrzędnych (x,y). Dane te aproksymujemy linią prostą w procedurze zwanej regresją liniową. Jeśli nakręciliśmy siedem filmów, mamy siedem równań prostych i dalszej obserwacji poddajemy siedem ich współczynników kierunkowych. Czy dryf tych współczynników wskazuje na obrót Ziemi pod wahadełkiem?

Ten prosty algorytm lokalizacji plamki zazwyczaj powinien być poprzedzony operacją kontrastowania progowego w celu eliminacji szumów z kadru filmu. Operacja ta polega na wstępnym wyzerowaniu pikseli, które są ciemniejsze od pewnego poziomu. W programie określamy też, w jakim kanale barwowym należy poszukiwać plamki (nasza plamka jest czerwona i warto wykorzystać tę informację w celu dodatkowej eliminacji zakłóceń).

Program wyświetla sobie film kadr po kadrze za pomocą komponentu MediaPlayer i na każdej fotografii wyszukuje plamkę oraz zapisuje jej współrzędne. Opisana tutaj aplikacja wraz z plikami źródłowymi znajduje się na dołączonej płycie CD.

Po zakończeniu analizy wszystkich filmów mamy tyleż zbiorów współrzędnych (x,y). Każdy z tych zbiorów umieścimy w arkuszu Excela i tam dokonamy dalszej obróbki, zmierzającej do wykrycia zmienności kierunków drgań wahadła. Jak to zrobimy? Metodą optymalnego dopasowania (ściślej - regresji liniowej) wyznaczymy równania prostych, przechodzących przez każdy z tych zbiorów punktów, i popatrzymy na ich współczynniki kierunkowe. Mamy nadzieję, że proste będą się obracały z szybkością 12 stopni na godzinę.

W załączonym pliku Foucault.xls znajduje się propozycja opracowania danych (rysunek 7). Po analizie siedmiu filmów okazało się, że nasza planeta kręci się wolniej, niż sądziliśmy do tej pory... Albo że nasz kraj leży w zwrotnikowej szerokości geograficznej... Jestem jednak pewien, że zweryfikują Państwo te pomiary i podzielą się z nami swoimi wynikami. Jak zwykle, czekam na Państwa opracowania tego pasjonującego i trudnego tematu. Tym razem szczególnie liczę na młodzież szkolną, zgromadzoną w kółkach zainteresowań. Proszę przysyłać swoje programy, spostrzeżenia i uwagi. Najciekawsze opracowania nagrodzimy drobnymi upominkami.

<hr size=1 noshade>Algorytm wzrostu - podsumowanie

W wydaniu 9/2005 PCWK zajmowaliśmy się hodowlą realistycznych form roślinnych, a ściślej - tzw. algorytmem wzrostu. Roślinka była zdefiniowana jako ciąg znaków, w którym jeden symbol odpowiadał za pień, inny za gałązkę, listek, igiełkę, kwiatek itd. Ten zrazu krótki ciąg znaków był rozwijany - gałązki puszczały boczne odnogi, przybywało listków i kwiatów. To była faza hodowli rośliny, zakodowanej w postaci tekstowej formuły. Długość tekstowej formuły wzrastała, stąd nazwa całego algorytmu.

Po tej fazie hodowli następowała równie ważna faza realizacji receptury na ekranie, czyli wykreślania obrazu ostatecznej formy. Tekstowa formuła rośliny była odczytywana znak po znaku i zamieniana w obraz jurajskiej paproci. To trudniejszy fragment algorytmu, odwołujący się do rekurencji w tych fragmentach, gdzie gałązka wypuszcza boczną gałązkę, z której z kolei wyrasta następna witka i tak dalej. Świat roślinny został stworzony rekurencyjnie.

Pan Krzysztof Janc z Nowego Sącza nadesłał program generujący choinkę. Program jest technicznie dość złożony, bo do wykreślenia wyhodowanej formy autor użył biblioteki graficznej OpenGL. Program wraz z plikami źródłowymi znajduje się na dołączonej płycie CD.

Pan Krzysztof Janc otrzymuje nagrodę miesiąca - odtwarzacz DVD.

Stale otrzymuję od Państwa prace na tematy opisane dawno temu... Szczególnym i nieustającym uznaniem cieszy się fraktal Mandelbrota. Bardzo dziękuję za wszelką korespondencję, ale jeśli zależy Państwu na prezentacji swoich programów, proszę o większą dyscyplinę w tej sprawie. Z powodów redakcyjnych mogę opisać te prace, które nadejdą do nas w ciągu 2 miesięcy. Czasu jest niewiele, ale wielokrotnie wspominałem, że nie oczekuję programów dopracowanych. Wystarczą jakieś obrazy, działające szkice, ciekawe idee, autorskie komentarze, pomysły. Jeśli na coś ma Państwu zabraknąć czasu, niech to będzie doszlifowanie programu.


Zobacz również