Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00150 007848 11008889 na godz. na dobę w sumie
C++ Builder. Symulacje komputerowe - książka
C++ Builder. Symulacje komputerowe - książka
Autor: Liczba stron: 240
Wydawca: Helion Język publikacji: polski
ISBN: 83-7361-052-9 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> c++ builder - programowanie
Porównaj ceny (książka, ebook, audiobook).
Nowoczesne techniki programowania i projektowania pozwalają pisać złożone aplikacje także osobom nie będącym informatykami. Pasjonatom nauk przyrodniczych przychodzi z pomocą projektowanie obiektowe: dzięki zastosowaniu gotowych obiektów mogą oni symulować komputerowo zjawiska występujące w przyrodzie. Programowanie zorientowane obiektowo wymaga przede wszystkim bardzo dokładnych opisów funkcjonalnych obiektów; szczegóły techniczne, realizatorskie i znajomość ich konstrukcji wewnętrznej nie są tu ważne.

Książka C++Builder. Symulacje komputerowe przedstawia kilkanaście programów symulujących rozmaite zjawiska występujące w przyrodzie. Programy te zostały napisane w języku C++ (użyto dialektu C++Builder Borlanda). Zastosowano w nich gotowe klasy, które możesz odnaleźć na dołączonym do książki krążku CD, można je rozbudowywać i wykorzystywać we własnych programach. Osoby zainteresowane tajnikami programowania obiektowego poznają szczegóły konstrukcji obiektów, przyrodnicy mogą pominąć bardziej techniczne fragmenty i skoncentrować się na modelowaniu zjawisk przyrodniczych.

Programy opisane w książce dotyczą:

Programowanie obiektowe jest to jedyna technika szybkiego tworzenia aplikacji z wykorzystaniem istniejących, uniwersalnych algorytmów. Jeśli jesteś interesujesz się fizyką czy biologią, książka udowodni Ci, że nie musisz kończyć studiów informatycznych, by modelować komputerowo interesujące Cię zjawiska.

Dzięki lekturze tej książki:

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl C++Builder. Symulacje komputerowe Autor: Andrzej Stasiewicz ISBN: 83-7361-052-9 Format: B5, stron: 238 Zawiera CD-ROM Nowoczesne techniki programowania i projektowania pozwalaj¹ pisaæ z³o¿one aplikacje tak¿e osobom nie bêd¹cym informatykami. Pasjonatom nauk przyrodniczych przychodzi z pomoc¹ projektowanie obiektowe: dziêki zastosowaniu gotowych obiektów mog¹ oni symulowaæ komputerowo zjawiska wystêpuj¹ce w przyrodzie. Programowanie zorientowane obiektowo wymaga przede wszystkim bardzo dok³adnych opisów funkcjonalnych obiektów; szczegó³y techniczne, realizatorskie i znajomoġæ ich konstrukcji wewnêtrznej nie s¹ tu wa¿ne. Ksi¹¿ka C++Builder. Symulacje komputerowe przedstawia kilkanaġcie programów symuluj¹cych rozmaite zjawiska wystêpuj¹ce w przyrodzie. Programy te zosta³y napisane w jêzyku C++ (u¿yto dialektu C++Builder Borlanda). Zastosowano w nich gotowe klasy, które mo¿esz odnaleĥæ na do³¹czonym do ksi¹¿ki kr¹¿ku CD, mo¿na je rozbudowywaæ i wykorzystywaæ we w³asnych programach. Osoby zainteresowane tajnikami programowania obiektowego poznaj¹ szczegó³y konstrukcji obiektów, przyrodnicy mog¹ pomin¹æ bardziej techniczne fragmenty i skoncentrowaæ siê na modelowaniu zjawisk przyrodniczych. Programy opisane w ksi¹¿ce dotycz¹: • Widma ġwiat³a bia³ego • Drgañ i fal prostych • Fal na wodzie i ich interferencji • Interferencji ġwiat³a • Postrzegania g³êbi i geometrii 3D • Fotografii relatywistycznej • Algorytmów wzrostu • Tworzenia wirtualnych przestrzeni za pomoc¹ techniki ġledzenia promieni (ray-tracing) Programowanie obiektowe jest to jedyna technika szybkiego tworzenia aplikacji z wykorzystaniem istniej¹cych, uniwersalnych algorytmów. Jeġli jesteġ interesujesz siê fizyk¹ czy biologi¹, ksi¹¿ka udowodni Ci, ¿e nie musisz koñczyæ studiów informatycznych, by modelowaæ komputerowo interesuj¹ce Ciê zjawiska. Spis treści Wstęp ...................................................z............................................ 5 Rozdział 1. Widmo światła białego ...................................................z.................... 7 Wszystkie barwy tęczy...................................................b...........................................7 Rozdział 2. Drgania i fale proste ...................................................z..................... 15 Trochę fizyki ...................................................b...................................................b....16 Parametry fali prostej ...................................................b...........................................16 Sumowanie dwóch fal prostych...................................................b.............................20 Sumowanie drgań prostopadłych ...................................................b...........................23 Suma fal i kształtowanie impulsów...................................................b........................25 Biorytmy...................................................b...................................................b..........28 Rozdział 3. Fale na wodzie...................................................z.............................. 31 Powierzchniowa fala płaska ...................................................b..................................31 Fala kolista...................................................b...................................................b.......36 Interferencja fal na wodzie...................................................b....................................41 Rozdział 4. Interferencja światła ...................................................z..................... 47 Doświadczenie Younga ...................................................b........................................47 Przestrzenny obraz interferencji światła ...................................................b......................54 Edytor układu otworków ...................................................b......................................62 Synteza obrazu rzeczywistego z obrazu interferencyjnego ..........................................69 Filtracja przestrzenna ...................................................b...........................................72 Rozdział 5. Postrzeganie głębi ...................................................z........................ 77 Trzy techniki syntezy głębi ...................................................b...................................78 Geometria postrzegania 3D...................................................b...................................82 Algorytmy syntezy głębi...................................................b.......................................84 Sześcian 3D...................................................b...................................................b87 Kula 3D ...................................................b...................................................b.....89 Eksperymenty z bazą ...................................................b...........................................92 Porządkowanie sceny...................................................b...........................................95 Rozdział 6. Fotografia relatywistyczna ...................................................z............. 103 Teoria fotografii relatywistycznej ...................................................b........................ 104 Obiekt TRelatyw3d...................................................b............................................ 107 Relatywistyczny krzyż...................................................b.................................. 112 Relatywistyczna kostka ...................................................b................................ 114 4 C++Builder. Symulacje komputerowe Zderzenie ze ścianą ...................................................b............................................ 116 Relatywistyczna autostrada ...................................................b........................... 119 Relatywistyczna kula...................................................b.................................... 120 Relatywistyka a kąt widzenia obiektywu...................................................b................. 122 Twoja fotografia ...................................................b................................................ 125 Relatywistyczna stereoskopia...................................................b.............................. 130 Rozdział 7. Algorytm wzrostu...................................................z........................ 137 Rozwijanie tekstu ...................................................b.............................................. 137 Interpretacja formuły tekstowej...................................................b........................... 140 Bardziej złożone rozwinięcia ...................................................b.............................. 145 Wzrost 3D ...................................................b...................................................b..... 149 L system, czyli hodowla form roślinnych ...................................................b................ 153 Roślinny świat Lindenmayera ...................................................b............................. 159 Jeszcze więcej parametrów ...................................................b................................. 162 Rozdział 8. Obrazy świetlnego promienia ...................................................z....... 175 Idea techniki śledzenia promieni...................................................b.......................... 176 Wyznaczenie promienia rysującego ...................................................b..................... 177 Promień szuka obiektów...................................................b..................................... 182 Promień wyrusza w dalszą drogę...................................................b......................... 188 Kolory ...................................................b...................................................b........... 192 Zabudowa sceny...................................................b................................................ 194 Implementacja ...................................................b...................................................b 195 Co dalej?...................................................b...................................................b.. 213 Dodatek A Funkcjonalne opisy klas ...................................................z.............. 215 Klasa TSkalowanie ...................................................b............................................ 215 Klasa TDiagram..................................................b.................................................. 217 Klasa TWidmo ...................................................b.................................................. 217 Klasa TWykresPseudo3d...................................................b.................................... 217 Klasy TPunkt, TLinia, TWektor...................................................b.......................... 220 Klasa T3d ...................................................b...................................................b...... 221 Klasa TWykres3d ...................................................b.............................................. 222 Klasa TStereo...................................................b...................................................b. 224 Klasy TRelatyw3d i TRelatywStereo ...................................................b................... 224 Klasa TObraz ...................................................b...................................................b. 224 Literatura ...................................................z................................... 229 Skorowidz...................................................z................................... 231 Rozdział 3. Fale na wodzie Poprzedni rozdział był poświęcony doskonaleniu umiejętności włączania obiektów 65MCNQYCPKG i 6 KCITCO do swoich aplikacji. Pretekstem były nieskomplikowane zja- wiska falowe, konkretnie tzw. fale proste. Teraz zmierzymy się z nieco poważniejszym zagadnieniem — falami powierzchniowymi. Fizyka opisywanych zjawisk nie będzie przy tym zbyt trudna, ponieważ ograniczymy się do rzeczy zapewne znanych. Jednak komputerowa wizualizacja fal powierzchniowych będzie wymagała włączenia do nasze- go warsztatu nowych obiektów, zdolnych do wykreślenia obrazów płacht funkcyjnych. Powierzchniowa fala płaska Powierzchnia wody jest dwuwymiarowym, sprężystym ośrodkiem, w którym mogą rozchodzić się zaburzenia. Cząsteczka (w rzeczywistości raczej grupa takich cząsteczek) wody wytrącona, np. kijem, z położenia równowagi drga rytmicznie w górę i w dół. Za pośrednictwem sił oddziaływania międzycząsteczkowego porusza inne, sąsiednie czą- steczki. Wówczas mamy do czynienia z rozchodzeniem się fali na powierzchni wody. Przedstawimy taki obraz na ekranach monitorów. Nie będziemy przy tym modelować tych wszystkich cząsteczek i ich oddziaływań, tylko wymyślimy matematyczny kształt dwuwymiarowej funkcji, której wykres możliwie wiernie odda obraz prawdziwej fali. Aplikacja pokaże obraz powierzchniowej fali płaskiej. Taka fala powstaje wtedy, gdy czynnik zaburzający spokojną taflę wody ma kształt długiej linijki. Gdyby nagle po- ruszyła się jedna ze ścian basenu, po powierzchni wody zaczęłaby wędrować fala pła- ska. Termin fala płaska — cokolwiek oznacza — powstał głównie po to, by odróżnić taką falę od powierzchniowej fali kolistej. Do fal kolistych przejdziemy potem, a teraz włączmy komputery. Zaczniemy od eksploatacji nieco zubożonego algorytmu, zamkniętego w klasie 69[MTGU 2UGWFQF. Algorytm ten, opisany ze strony funkcjonalnej w dodatku na końcu książki, służy do prostego obrazowania powyginanych, dwuwymiarowych powierzchni (rysu- nek 3.1). Teraz skoncentrujmy się na sposobie włączania go do aplikacji. 32 C++Builder. Symulacje komputerowe Rysunek 3.1. Obiekt TWykresPseudo3d nie nadaje się do bezpośredniego wykorzystania, bo potrafi tylko wykreślać błahe, proste, płaskie powierzchnie. Na szczęście, funkcja odpowiedzialna za wykres jest zapowiedziana jako wirtualna, a to znaczy, że powinniśmy utworzyć obiekt potomny, który przejmie cały ustrój TWykresPseudo3d, ale z własną, już niewirtualną funkcją, odpowiadającą za kształt wykresu Przypomnijmy raz jeszcze schemat działania, prowadzący do uzyskania stanu zerowego aplikacji z dodatkowym modułem. Należy:  założyć nowy katalog roboczy,  skopiować do niego pliki nowego modułu, tym razem pseudo3d.h i pseudo3d.cpp będące nośnikiem klasy 69[MTGU2UGWFQF,  uruchomić Buildera i włączyć do projektu pseudo3d.cpp,  dopisać frazę KPENWFGRUGWFQFJ,  zapisać wszystko w katalogu roboczym. Spróbujmy wszystko zrobić tak jak dotychczas. Wygenerujmy funkcję — reakcję na zdarzenie 1P2CKPV (jest to funkcja odpowiedzialna za grafikę okienka). Zadeklarujmy tam egzemplarz klasy 69[MTGU2UGWFQF, tak jak podpowiada to intuicja i dotychczasowe doświadczenie z obiektami 65MCNQYCPKG albo 6 KCITCO. Wreszcie, uruchomimy KVGTCVQT kreślący wykres: XQKFAAHCUVECNN6(QTO(QTO2CKPV 61DLGEV 5GPFGT ] KPVOCTIZG[GZG[GYURÎđTúFPGGMTCPQYGQFEKPMC 69[MTGU2UGWFQFY OCTIOCTI NKGPV9KFVJ NKGPV*GKIJV OCTI NKGPV*GKIJV OCTI  YKPKELWLAKVGTCVQT WTWEJQOKGPKGKVGTCVQTC YJKNG YKVGTCVQT ZG[GZG[G RúVNCMTGħNæECY[MTGU ]  CPXCU /QXG6Q ZG[G Y[MTGħNGPKGQFEKPMCY[MTGUW  CPXCU .KPG6Q ZG[G  _ _ Konstruktor tworzy obiekt typu 69[MTGU2UGWFQF. Publiczna funkcja KPKELWLAKVGTCVQT rozpoczyna bieg algorytmu. Publiczny KVGTCVQT dostarcza współrzędne wszystkich od- cinków, które mają złożyć się na wykres. Tylko gdzie jest nasza fala płaska? Rozdział 3. ♦ Fale na wodzie 33 Algorytmy obiektu, zanim wykreślą jakikolwiek punkt płachty funkcyjnej, muszą prze- pytać jakąś funkcję o jej wartość we wszystkich, istotnych dla kreślenia punktach. Taka funkcja jest wbudowana w obiekt. To rozwiązanie ma jednak oczywistą wadę — obiekt kreśli zawsze tę samą płachtę, tutaj płaski prostokąt. Wiem, co mówię. Oto wbudowana w 69[MTGU2UGWFQF, trywialna funkcja, której wykres rysuje obiekt: FQWDNG69[MTGU2UGWFQFHWP FQWDNGZFQWDNG[ ] TGVWTP _ Musimy ją podmienić. W świecie obiektów przewidziano taką sytuację. Po pierwsze, niech wykreślana funkcja będzie rzeczywiście na stałe wbudowana do obiektu, ale niech to będzie funkcja wirtualna, czyli możliwa do przedefiniowania: ENCUU69[MTGU2UGWFQF ] RTKXCVG  RWDNKE 69[MTGU2UGWFQF  MQPUVTWMVQT  XKTVWCNFQWDNGHWP FQWDNGZFQWDNG[   _ Po drugie, użytkownicy naszego obiektu nie będą bezpośrednio korzystać z klasy 69[MTGU2UGWFQF, tylko tzw. klasy potomnej. Klasa potomna odziedziczy wszystko po 69[MTGU2UGWFQF, za wyjątkiem funkcji wirtualnej. Na jej miejsce napiszemy własną, która nie będzie już wirtualna: ENCUU6/QL9[MTGU69[MTGU2UGWFQFFKGFKEGPKG ] RTKXCVG  RWDNKE 6/ÎL9[MTGU  MQPUVTWMVQT  FQWDNGHWP FQWDNGZFQWDNG[ PQYCHWPMELC  _ Tak naprawdę, użytkownik naszego obiektu 69[MTGU2UGWFQF (w powyższej sytuacji zwanego obiektem bazowym) niewiele się napracuje. Sama fraza dziedziczenia wy- maga nikłego zaangażowania w pisanie — dwukropek i przytoczenie nazwy obiektu. Napisanie konstruktora okaże się bardzo łatwe, gdyż konstruktor 6/QL9[MTGU ograniczy się do wywołania konstruktora 69[MTGU2UGWFQF . A co z napisaniem funkcji HWP ? No cóż, akurat to jest konieczne, ponieważ właśnie nasz użytkownik ma pomysł na płachtę funkcyjną. Co można powiedzieć o dziedziczeniu i funkcjach wirtualnych? Jest to prawdziwa re- wolucja w programowaniu. Dostajemy nowy, pachnący farbą obiekt, który możemy zmieniać, nie bojąc się, że coś popsujemy. Algorytmy wirtualne są po to, by je zmie- niać, a ściślej — by na ich miejsce wprowadzać własne. 34 C++Builder. Symulacje komputerowe Postawmy się na chwilę w roli programisty (np. Borlanda) — producenta obiektów. Jednym z jego najbardziej odpowiedzialnych zadań jest dokonanie wyboru, które algo- rytmy pisanego obiektu mają być wirtualne, czyli możliwe do przedefiniowania przez przyszłych użytkowników. Jeśli zabraknie gdzieś słowa XKTVWCN, obiekt już zawsze bę- dzie niezbyt elastyczny w użyciu, np. zawsze będzie rysował wykres płaskiej powierzch- ni. Dzięki wirtualności mogą powstawać obiekty prawdziwie uniwersalne. Dopiero osta- teczny użytkownik zadecyduje, co tak naprawdę ma robić ów obiekt. Jeśli w opisie obiektu widzimy jakieś algorytmy opatrzone frazą XKTVWCN, należy się zastanowić, czy nie warto utworzyć zupełnie nowego obiektu, który będzie potom- kiem bazowego oryginału. W ten sposób mamy możliwość napisania nowej funkcji, która zastąpi wirtualny oryginał. Teraz napiszemy tę aplikację wzorcowo. Do powyższego schematu działania dodamy tworzenie obiektu potomnego z konkretną (niebędącą już wirtualną) funkcją, opisującą kształt płaskiej fali powierzchniowej. W części h modułu z formą (mógłby to też być nowy, specjalnie powołany do życia mo- duł) dopiszemy deklarację nowej klasy: KPENWFGRUGWFQFJ  ENCUU6(CNC2NCUMCRWDNKE69[MTGU2UGWFQF ] RWDNKE 6(CNC2NCUMC KPVZGKPV[GKPVGUGTKPVGY[UFQWDNGZTFQWDNG[T FQWDNGTUGTFQWDNGTY[U  FQWDNGHWP FQWDNGZFQWDNG[  _  ENCUU6(QTORWDNKE6(QTO ] AARWDNKUJGF+ OCPCIGF QORQPGPVU XQKFAAHCUVECNN(QTO2CKPV 61DLGEV 5GPFGT  RTKXCVG7UGTFGENCTCVKQPU RWDNKE7UGTFGENCTCVKQPU AAHCUVECNN6(QTO 6 QORQPGPV 1YPGT  _ Część h zawiera więc deklaracje dwóch klas — naszej, powstałej z 69[MTGU2UGWFQF i klasy okienka, dodanej automatycznie przez Builder. Uważajmy, by niczego nie popsuć w kodzie automatycznie wygenerowanym przez Borlanda. Nie zapomnijmy też o frazie z pierwszej linii powyższego algorytmu, która informuje kompilator, co oznacza napis 69[MTGU2UGWFQF. Deklaracja obiektu o nazwie 6(CNC2NCUMC wprowadza dwa nowe algorytmy: swój kon- struktor i funkcję przedefiniowującą wirtualny oryginał. Musimy te algorytmy spisać w części CPP modułu: 6(CNC2NCUMC6(CNC2NCUMC KPVZGKPV[GKPVGUGTVKPVGY[UFQWDNGZT FQWDNG[TFQWDNGTUGTFQWDNGTY[U 69[MTGU2UGWFQF ZG[GGUGTGY[UZT[TTUGTVTY[U ] Rozdział 3. ♦ Fale na wodzie 35 _  FQWDNG6(CNC2NCUMCHWP FQWDNGZFQWDNG[ ] TGVWTP EQU Z  _ Pierwsza z tych funkcji jest konstruktorem nowej klasy (dlatego, że nazywa się tak samo jak klasa). Konstruktor ten nie robi nic poza wywołaniem konstruktora klasy bazowej i przekazaniem mu wszystkich swoich argumentów. Fraza z dwukropkiem, łącząca dwa nagłówki konstruktorów, jest wymagana przez składnię języka. Druga funkcja ma nagłówek identyczny z jej wirtualnym oryginałem i wniknie w niuan- se algorytmów, w których uczestniczył jej pierwowzór. Obiekty nawet nie poznają, że ktoś zamienił funkcje. Niewielka zmiana jest też w funkcji — reakcji na zdarzenie 1P2CKPV. Tworzymy tam konkretny obiekt naszej, niewirtualnej 6(CNC2NCUMC, która nie jest już klasą 69[MTGU 2UGWFQF: XQKFAAHCUVECNN6(QTO(QTO2CKPV 61DLGEV 5GPFGT ] 6(CNC2NCUMCHR OCTIOCTI NKGPV9KFVJ NKGPV*GKIJV OCTI NKGPV*GKIJV  OCTI   HRKPKELWLAKVGTCVQT   Rysunek 3.2. Jeśli klasa posiada wirtualne algorytmy, jest to sygnał, że prawdopodobnie możemy głęboko ingerować w jej funkcjonowanie. Należy tylko zrobić dwie rzeczy: utworzyć klasę potomną i spisać w niej nowe wersje wirtualnych algorytmów. Ta blacha falista to niezbyt ciekawy obraz płaskiej fali powierzchniowej. Iterator wykresu umożliwia sprawdzenie, czy kreślony odcinek podjeżdża w górę czy też opada w dół. Zastosowano tu inny schemat barwienia zboczy rosnących i malejących. Szczegóły znajdują się na płycie CD Jeżeli ktoś chce eksperymentować, to (gdy program będzie już gotowy) może wrócić jeszcze raz do tekstu źródłowego i usunąć słowo XKTVWCN z deklaracji bazowej klasy 69[MTGU2UGWFQF— czekający na modyfikację. Całość powinna się skompilować i uru- chomić, lecz na ekranie znów pojawi się płaska powierzchnia. Dlaczego? Obiekt potom- ny zawiera teraz dwie funkcje: głęboko ukryty, niewirtualny oryginał i nadpisujący go nowy egzemplarz. Jednocześnie wszystkie operacje tworzenia wykresu znajdują się w klasie bazowej, zatem ważny jest bazowy, nieciekawy, ale bliższy egzemplarz funk- cji. Schemat podmieniania bazowych algorytmów nie zadziałał. 36 C++Builder. Symulacje komputerowe Fala kolista Powierzchnia wody jest środowiskiem dwuwymiarowym. Dzięki sprężystości oddziały- wań między cząsteczkami wody mogą rozchodzić się w tym środowisku dwuwymiaro- we fale poprzeczne (tzn. takie, w których wychylenie nie pokrywa się z kierunkiem rozprzestrzeniania). Dzięki swej powszechności, woda jest idealnym miejscem, umoż- liwiającym obserwację i badanie fal powierzchniowych. Zaczniemy od matematycznego opisu takiej fali. Opisać falę, to znaczy podać wychyle- nie powierzchni wody w dowolnym punkcie Z[ . Fale na wodzie (a raczej ich sta- tyczny, zatrzymany w czasie obraz) są dane następującym równaniem: ( Z[ # UKP  RK. T HK  Dzięki takiemu równaniu potrafimy wyliczyć wychylenie powierzchni wody w dowol- nym punkcie. W powyższym równaniu parametr # oznacza amplitudę, . — długość fali i HK — jej fazę początkową. Parametry te są niemal identyczne z ich odpowiedni- kami we wcześniej omawianych falach prostych. O ile jednak uprzednio opisane ciągi falowe zależały od jednej współrzędnej Z, tak koliste fale na wodzie (rysunek 3.3) zależą od odległości od centrum, w którym znajduje się drgający punkt, wymuszający po- wstawanie fali. Odległość ta jest zwyczajowo oznaczana literą T: FQWDNGTUSTV Z Z [ [  Rysunek 3.3. Powierzchniowa fala kolista, której formuła zawiera dość istotny błąd — amplituda nie maleje wraz z odległością Jeszcze raz użyjemy mało efektownej klasy 69[MTGU2UGWFQF. Program właściwie ni- czym nie różni się od poprzedniego — jedynie wprowadzana jest funkcja o innym kształ- cie matematycznym: RTGFGHKPKQYCPCHWPMELCQDKGMVWRQFUVCYQYGIQ FQWDNG6(CNC-QNKUVCHWP FQWDNGZFQWDNG[ ] FQWDNGTUSTV Z Z [ [  TGVWTP EQU T  _ Prawdziwe, koliste fale na wodzie mają jeszcze jedną cechę — są tym słabsze, im dalej odpłynęły (rysunek 3.4). Zatem ich amplituda zależy też od odległości: ( Z[ # T  UKP  RK. T HK  Rozdział 3. ♦ Fale na wodzie 37 Rysunek 3.4. Realistyczny obraz fali powierzchniowej musi zawierać czynnik tłumiący amplitudę wraz ze wzrostem odległości — im dalej, tym mniejsza fala. Oto wykres funkcji F(x, y) = 50 ∗ exp(−r / 100) ∗ cos(r). Funkcja ta maleje wraz z odległością W powyższym równaniu amplituda jest malejącą funkcją odległości. Teraz sporządzimy bardziej realistyczny wykres fali kolistej. Zmienimy narzędzie kre- ślące płachtę i, zamiast ubogiego typu 69[MTGU2UGWFQF, wprowadzimy bardziej zaawan- sowany 69[MTGUF. Klasa ta jest potomkiem obiektu 6F, zajmującego się wykreślaniem perspektywicznych rzutów terenu. Implementuje też oświetlenie płachty. Przebadajmy kształty publicznych algorytmów 69[MTGUF. Najważniejszy jest konstruktor — algorytm służący do tworzenia konkretnego egzem- plarza obiektu typu 69[MTGUF: 69[MTGUF 62WPMVQDURQ[ELCQDUGTYCVQTC 62WPMVQUYRQ[ELCRWPMVWQħYKGVNCLæEGIQ FQWDNGZT[TTUGTTY[UQDUCTHWPMELK KPVKNAZKNA[NKEDCRQFKCđÎYFKGFKP[ KPVZG[GGUGTGY[UQMPQGMTCPQYG FQWDNGQFNAGMTUGTAGMTY[UAGMT QRKUGMTCPW Trzy ostatnie argumenty mają swoje wartości domyślne, zatem w konkretnej sytuacji może ich po prostu nie być. Oznacza to pozostanie przy predefiniowanych wartościach odległości od ekranu i jego rozpiętości w metrach. Obiekt 69[MTGUF (a raczej jego przodek 6F) zakłada, że obserwowana rzeczywistość spoczywa w pobliżu początku układu współrzędnych. Mówiąc inaczej, stożek widzenia jest zawsze skierowany do środka. To pewne uproszczenie w stosunku do takich biblio- tek, jak np. OpenGL. Jednak dzięki temu wystarczy zadać pozycję obserwatora, którego współrzędne widzimy jako trzy pierwsze argumenty konstruktora. Trzy kolejne argumenty to pozycja punktu oświetlającego. Obiekt analizuje wzajemną zależność położeń obserwatora, punktu oświetlającego oraz usytuowania obserwowanej powierzchni i na podstawie tych danych wylicza jasność oświetlenia. Potem widzimy cztery parametry określające wycinek matematycznej powierzchni, nad którą jest zadana funkcja (czyli dziedzinę funkcji). Dalej mamy dwa parametry określające liczbę podziałów płachty na elementarne czwo- rokąty i wreszcie położenie oraz rozmiary okienka ekranowego (przeznaczonego na grafikę). 38 C++Builder. Symulacje komputerowe Oto typowa fraza definiowania zmiennej typu 69[MTGUF: 62WPMVQDUGTYCVQT   62WPMVQUYKGVNGPKG   69[MTGUFYF QDUGTYCVQTRQ[ELCQDUGTYCVQTC QUYKGVNGPKGRQ[ELCRWPMVWQħYKGVNCLæEGIQ QDUCTHWPMELK FQMđCFPQħèMTGħNGPKC NGY[IÎTP[TÎIQMKGPMC  NKGPV9KFVJ NKGPV*GKIJV QMPQGMTCPQYG Jak przed chwilą, wykreślany kształt zadajemy wirtualną funkcją dwóch zmiennych: XKTVWCNFQWDNGHWP FQWDNGZFQWDNG[ HWPMELCFQY[T[UQYCPKC Funkcja ta musi być określona w dziedzinie niedawno zdefiniowanej w konstruktorze klasy. Wirtualność funkcji sugeruje, że będziemy musieli utworzyć obiekt potomny, czyli obiekt dziedziczący właściwości niniejszego obiektu. Jeśli zaniechamy tej czyn- ności, będziemy zmuszeni do obserwacji błahego pierwowzoru oryginalnej funkcji: FQWDNGHWP FQWDNGZFQWDNG[ ] TGVWTP _ Pierwowzór ten znów jest niezwykle prostą płachtą, spełniającą wymagania algorytmu. Rysunek 3.5. Funkcja wirtualna niekiedy nic nie robi (ma puste ciało) lub robi zbyt mało, jak np. na powyższym rysunku, gdzie widać wykres funkcji f(x, y) = 0. Obecność funkcji wirtualnej jest zaproszeniem do tworzenia obiektu potomnego, w którym funkcję wirtualną zastąpi pełnowartościowy algorytm Za kreślenie płachty funkcyjnej odpowiada specjalny KVGTCVQT. Stanowi go para funkcji: XQKFKPKELWLAKVGTCVQT XQKF RQEæVGMMTGħNGPKC DQQNKVGTCVQT MTGħNGPKGGNGOGPVRQGNGOGPEKGFQRÎMKVTWG KPVZG[GZG[GZG[GZG[GLCUPQUE  Rozdział 3. ♦ Fale na wodzie 39 +VGTCVQT kolejno dostarcza współrzędne wszystkich wielokątów, które złożą się na płachtę, a dodatkowo informuje o procentowej jasności ich oświetlenia. Typowe frazy kreślenia płachty KVGTCVQTGO to: KPVZG[GZG[GZG[GZG[GLCUP YFKPKELWLAKVGTCVQT  YJKNG YFKVGTCVQT ZG[GZG[GZG[GZG[GLCUP ] COKGēLCUPPCFQYQNP[MQNQT 4GEVCPING ZG[GZG[GZG[GZG[G  _ Ten, nieco umowny, algorytm ilustruje to, co trzeba, czyli uruchomienie KVGTCVQTC, pozyskiwanie współrzędnych i koloru każdego z elementarnych wielokątów płachty i wykreślanie go. Napiszmy teraz prawdziwy program, ilustrujący srebrzystą powierzchnię wody, którą w jednym punkcie ktoś dotknął kijem. W katalogu roboczym niech znajdą się pliki źródłowe klasy 69[MTGUF, a w związku z tym także klasy 6F, bo to ona jest przod- kiem 69[MTGUF. Ponieważ pojawił się też napis 62WPMV, do katalogu dodamy też mo- duł geometria. Po uruchomieniu Buildera do przestrzeni aplikacji (do projektu) dołą- czymy pliki cpp tych trzech modułów (rysunek 3.6). Rysunek 3.6. Wszystkie moduły, nawet te, do których nie odwołujemy się bezpośrednio, muszą być wyszczególnione w projekcie. Projekt jest spisem treści aplikacji Dysponując stanem zerowym aplikacji, czyli poprawnie skompletowanym projektem, two- rzymy klasę potomną. W części H modułu z okienkiem wpisujemy frazy dziedziczenia: ENCUU69[MTGURWDNKE69[MTGUF ] RTKXCVG RWDNKE 69[MTGU 62WPMVQDU62WPMVQUY FQWDNGZTFQWDNG[TFQWDNGTUGTFQWDNGTY[U KPVKNAZKPVKNA[ KPVZGKPV[GKPVGUGTKPVGY[U  FQWDNGHWP FQWDNGZFQWDNG[  _ 40 C++Builder. Symulacje komputerowe Powyższa deklaracja zapowiada klasę potomną, zatem przejmującą całe wnętrze klasy 69[MTGUF, zaopatrzoną jednak w dwa własne algorytmy. W części CPP spiszemy ciała tych algorytmów: -QPUVTWMVQTQDKGMVWMTGħNæEGIQ 69[MTGU69[MTGU 62WPMVQDU62WPMVQUY FQWDNGZTFQWDNG[TFQWDNGTUGTFQWDNGTY[U KPVKNAZKPVKNA[ KPVZGKPV[GKPVGUGTKPVGY[U 69[MTGUF QDUQUY ZT[TTUGTTY[U KNAZKNA[ZG[GGUGTGY[U ] _  2TGFGHKPKQYCPCHWPMELCQDKGMVWRQFUVCYQYGIQ (CNCMQNKUVCY[ICUCLæECY[MđCFPKEQ FQWDNG69[MTGUHWP FQWDNGZFQWDNG[ ] FQWDNGTUSTV Z Z [ [  TGVWTP GZR T   EQU T  _ Konstruktor nie robi nic, a ściślej ogranicza się do wywołania konstruktora klasy bazo- wej. Funkcja zastępująca wirtualny oryginał wykreśla płachtę, będącą powierzchniowym kosinusem, wykładniczo gasnącym wraz z odległością. Należy jeszcze wygenerować i napisać najważniejszą funkcję — reakcję na zdarzenie 1P2CKPV: XQKFAAHCUVECNN6(QTO(QTO2CKPV 61DLGEV 5GPFGT ] KPVOCTI 62WPMVQDU  QUY   69[MTGUYF QDURQ[ELCQDUGTYCVQTC QUYRQ[ELCRWPMVWQħYKGVNCLæEGIQ QDUCTHWPMELK FQMđCFPQħèMTGħNGPKC OCTIOCTI  NKGPV9KFVJ OCTI NKGPV*GKIJV OCTI QMPQGMTCPQYG KPVZG[GZG[GZG[GZG[GLCUP KPVC 62QKPVR=? 6 QNQTMQNQT YFKPKELWLAKVGTCVQT RQEæVGMMTGħNGPKC YJKNG YFKVGTCVQT ZG[GZG[GZG[GZG[GLCUP ] R=?ZZGQRKUGNGOGPVCTPGIQEYQTQMæVC R=?[[G R=?ZZG R=?[[G R=?ZZG R=?[[G R=?ZZG Rozdział 3. ♦ Fale na wodzie 41 R=?[[G R=?ZZG R=?[[G C KPV FQWDNG LCUP  RQOQEPKEG MQNQT 6 QNQT 4)$ CCC U[PVGCMQNQTW  CPXCU 2GP  QNQTMQNQTMQNQTNKPKK  CPXCU $TWUJ  QNQTMQNQTMQNQTY[RGđPKGPKCEYQTQMæEKMC  CPXCU 2QN[IQP R  _ _ W powyższym algorytmie biblioteczna funkcja 2QN[IQP(wielokąt) zmusza do wprowa- dzenia tablicy zmiennych typu 62QKPV, ponieważ wymaga jej jako argumentu. Do barwienia elementów wykresu wykorzystaliśmy funkcję zamieniającą amplitudy czerwieni, zieleni i błękitu na windowsową reprezentację koloru: 6 QNQT4)$ KPVTKPVIKPVD  Rysunek 3.7. Wykres powierzchniowej fali kolistej, cieniowanej światłem. Liczba podziałów dziedziny, czyli liczba elementarnych wielokątów, określona w konstruktorze obiektu potomnego TWykres, celowo jest za duża. Dzięki temu lepiej widzimy strukturę płachty Interferencja fal na wodzie No dobrze, ale przecież na wodzie powstają nie tylko fale koliste czy płaskie. Obraz po- marszczonej wody potrafi być bardzo złożony. W takiej sytuacji wykorzystujemy ważne prawo superpozycji ciągów falowych: Dowolny układ zmarszczek można wyrazić jako sumę zbioru odpowiednio dobranych, prostych fal kolistych. Zasada ta nosi nazwę zasady superpozycji fal albo zasady Huyghensa. U jej podstaw leży teza, że fala to jakaś mniej lub bardziej skomplikowana gra prostych wychyleń cząsteczek z położenia równowagi. A wychylenia się sumują pod warunkiem, że nie są zbyt duże. 42 C++Builder. Symulacje komputerowe Jeśli na powierzchni wody mamy dwa źródła fal kolistych lub więcej, jest oczywistym, że każdy konkretny punkt powierzchni będzie falował pod wpływem każdej z tych fal. Możliwe są różne sytuacje, np. punkt może falować z dużą amplitudą, o ile spotykają się tam góry (albo doliny) fal kolistych, może też zupełnie nie falować, o ile góra jednej fali wpadnie tam w dolinę drugiej. Przy jakimś nieregularnym rozkładzie źródeł fal kolistych obraz zaburzeń powierzchni będzie bardzo złożony i raczej nieciekawy. Istnieją jednak specjalne konfiguracje źró- deł, którym warto się przyjrzeć. Z najprostszą sytuacją mamy do czynienia, gdy na wodzie znajdują się dwa źródła fal kolistych, które drgają w tej samej fazie. Możemy sobie wyobrazić, że harmonicznie (znaczy sinusoidalnie) uderzamy w wodę dwuzębnym widelcem. Okazuje się, że w ta- kiej, najprostszej sytuacji obserwujemy wielką regularność rozkładów wzmocnień i osła- bień fali wypadkowej. Komputerowe fotografie 3.8 – 3.10 ilustrują właśnie taką sytuację. Na kolejnych zwięk- sza się odległość między źródłami fal (oznaczona literą F). Proszę zauważyć, że obszary interferencji konstruktywnej, czyli wzmacniania fali, rozkładają się promieniście od cen- trum obrazu, w którym są umieszczone źródła fal. Obszary interferencji destruktywnej, czyli wygaszania się fal, też są rozłożone promieniście i przedzielają obszary interfe- rencji konstruktywnej. Rysunek 3.8. Fala o długości 4 cm jest wzbudzana w dwóch miejscach odległych od siebie o 4 cm. Słabo widoczne są obszary interferencyjnych wzmocnień i osłabień — odległość źródeł jest zbyt mała w porównaniu z długością fali Rysunek 3.9. Takie same fale, ale wzbudzane w miejscach odległych od siebie o 10 cm. Teraz obszary oddziaływań interferencyjnych są znacznie lepiej widoczne Rozdział 3. ♦ Fale na wodzie 43 Rysunek 3.10. Źródła fal są odległe o 20 cm. Wyraźnie widać kilka obszarów wzmocnień i osłabień, tzw. prążków interferencyjnych Zjawiska te mają bardzo proste wyjaśnienie: wzmocnienie fal następuje tam, gdzie spo- tykają się one w zbliżonej fazie (góra z górą, dolina z doliną). To z kolei następuje wte- dy, gdy różnica dróg przebytych przez obie fale równa się zero lub jest wielokrotnością długości fali (rysunek 3.11). Rysunek 3.11. W punkcie P nastąpi wzmocnienie falowania (interferencja konstruktywna), gdy różnica dróg, po których docierają tam fale cząstkowe, będzie równa całkowitej wielokrotności długości fali L Program, który wytworzył te obrazy, posługuje się obiektem 69[MTGUF, a ściślej obiek- tem klasy potomnej. Jest to program bardzo podobny do poprzedniego. Jedynie funkcja, odpowiadająca za kształt płachty, ma tutaj postać nieco bardziej złożoną, bo opisuje dwie fale koliste, które rozchodzą się z punktów przesuniętych od siebie na odległość F. Obliczany oraz ostatecznie zwracany rezultat jest sumą tych dwóch fal: FQWDNG69[MTGUHWP FQWDNGZFQWDNG[ ] FQWDNG.FFđWIQħèHCNKKQFNļTÎFGđ FQWDNGMTTT TUSTV Z Z [ [ QFNGIđQħèQFRWPMVWOKúF[ļTÎFđCOK TUSTV ZF ZF [ [ QFNGIđQħèQFRKGTYUGIQļTÎFđC TUSTV Z F Z F [ [ KQFFTWIKGIQ M /A2+. TGVWTPGZR T EQU M T  EQU M T YCTVQħèHWPMELK _ 44 C++Builder. Symulacje komputerowe Po przetestowaniu, co dzieje się, gdy dwa źródła identycznych fal kolistych stopniowo odsuwamy od siebie, spojrzymy na sytuację, w której takich źródeł jest coraz więcej. Program komputerowy wymaga jedynie drobnej zmiany w kształcie funkcji zadającej płachtę powierzchni wody: FQWDNG69[MTGUHWP FQWDNGZFQWDNG[ ] FQWDNG#.FM FQWDNGTTTTTTT TUSTV Z Z [ [  TUSTV Z F   Z F  [ [  TUSTV Z F   Z F  [ [  TUSTV ZF   ZF  [ [  TUSTV Z F   Z F  [ [  TUSTV Z  F   Z  F  [ [  TUSTV Z  F   Z  F  [ [  #GZR T  M /A2+. TGVWTP# EQU M T EQU M T EQU M T EQU M T EQU M T EQU M T  _ Zmiana funkcji ma charakter ilościowy, bowiem przybyło równoodległych źródeł fal. Jak zwiększanie liczby źródeł wpływa na rozkład interferencyjnych wzmocnień i osła- bień falowania? Okazuje się, że obszary wzmocnień i osłabień są tym wyraźniej zazna- czone, im więcej jest źródeł. Przede wszystkim zyskuje na sile prążek zerowego rzędu, leżący na wprost źródeł fal kolistych. Zjawisko to, wynikające wyłącznie ze wspomnia- nych zasad sumowania się fal przybywających do każdego, konkretnego punktu w róż- nych fazach, ma ogromne zastosowania w optyce, przy produkcji tzw. siatek dyfrakcyj- nych. Wkrótce zbadamy doświadczalnie ten temat (rysunek 3.12, 3.13). Rysunek 3.12. Obraz powierzchni wody pobudzanej do harmonicznych drgań w pięciu równoodległych punktach Co się stanie, gdy przy tej samej konfiguracji źródeł fal kolistych będziemy zwiększać długość fal? Rozumiejąc istotę powstawania obrazów interferencyjnych na powierzchni, nietrudno przewidzieć odpowiedź. Okazuje się, że w miarę zwiększania długości fal, obszary wzmocnień i osłabień falowania odsuwają się od siebie (rysunek 3.14). Rozdział 3. ♦ Fale na wodzie 45 Rysunek 3.13. Wraz z przybywaniem liczby punktów, źródeł fal kolistych, interferencja konstruktywna koncentruje się w obszarach przed i za otworami. Interferencja jest tym wyraźniejsza, im więcej źródeł regularnie rozmieszczonych. Scena z rysunku 3.13 jest oglądana z dalszej perspektywy, wyznaczonej pozycją obserwatora (5, 5, 3) metry Rysunek 3.14. Długość fali jest dwukrotnie krótsza niż na rysunku 3.13, pozostałe parametry są bez zmian Na rysunku 3.14 powinniśmy zauważyć, że obszary interferencji koncentrują się na wprost układu punktów wymuszających falowanie. Zjawisko to ma wielkie znaczenie w optyce, gdzie interferują ze sobą fale świetlne, np. wypuszczane z milionów otworków na powierzchni siatki dyfrakcyjnej. Fale światła o różnej długości (czyli różnej barwie) interferują konstruktywnie w różnych miejscach. Siatka dyfrakcyjna, dzięki zjawisku, które właśnie zbadaliśmy, dokonuje rozszczepienia światła na barwy spektralne. Na tej podstawie astronom potrafi odpowiedzieć, jaki jest skład chemiczny świecącej materii.
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

C++ Builder. Symulacje komputerowe
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: