SlideShare a Scribd company logo
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI    C++Builder. Symulacje
                                          komputerowe
           KATALOG KSI¥¯EK
                                          Autor: Andrzej Stasiewicz
                      KATALOG ONLINE      ISBN: 83-7361-052-9
                                          Format: B5, stron: 238
       ZAMÓW DRUKOWANY KATALOG            Zawiera CD-ROM


              TWÓJ KOSZYK
                                         Nowoczesne techniki programowania i projektowania pozwalaj¹ pisaæ z³o¿one aplikacje
                    DODAJ DO KOSZYKA     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
         CENNIK I INFORMACJE             zorientowane obiektowo wymaga przede wszystkim bardzo dok³adnych opisów
                                         funkcjonalnych obiektów; szczegó³y techniczne, realizatorskie i znajomo æ ich konstrukcji
                   ZAMÓW INFORMACJE      wewnêtrznej nie s¹ tu wa¿ne.
                     O NOWO CIACH
                                         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
                       ZAMÓW CENNIK
                                         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æ
                 CZYTELNIA               i wykorzystywaæ we w³asnych programach. Osoby zainteresowane tajnikami
                                         programowania obiektowego poznaj¹ szczegó³y konstrukcji obiektów, przyrodnicy mog¹
          FRAGMENTY KSI¥¯EK ONLINE       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)
Wydawnictwo Helion                       Programowanie obiektowe jest to jedyna technika szybkiego tworzenia aplikacji
ul. Chopina 6                            z wykorzystaniem istniej¹cych, uniwersalnych algorytmów. Je li jeste interesujesz siê
44-100 Gliwice                           fizyk¹ czy biologi¹, ksi¹¿ka udowodni Ci, ¿e nie musisz koñczyæ studiów informatycznych,
tel. (32)230-98-63                       by modelowaæ komputerowo interesuj¹ce Ciê zjawiska.
e-mail: helion@helion.pl
Spis treści
                Wstęp ............................................................................................... 5
Rozdział 1. Widmo światła białego ....................................................................... 7
                Wszystkie barwy tęczy..............................................................................................7
Rozdział 2. Drgania i fale proste ........................................................................ 15
                Trochę fizyki ..........................................................................................................16
                Parametry fali prostej ..............................................................................................16
                Sumowanie dwóch fal prostych................................................................................20
                Sumowanie drgań prostopadłych ..............................................................................23
                Suma fal i kształtowanie impulsów...........................................................................25
                Biorytmy................................................................................................................28
Rozdział 3. Fale na wodzie................................................................................. 31
                Powierzchniowa fala płaska .....................................................................................31
                Fala kolista.............................................................................................................36
                Interferencja fal na wodzie.......................................................................................41
Rozdział 4. Interferencja światła........................................................................ 47
                Doświadczenie Younga ...........................................................................................47
                Przestrzenny obraz interferencji światła .........................................................................54
                Edytor układu otworków .........................................................................................62
                Synteza obrazu rzeczywistego z obrazu interferencyjnego ..........................................69
                Filtracja przestrzenna ..............................................................................................72
Rozdział 5. Postrzeganie głębi ........................................................................... 77
                Trzy techniki syntezy głębi ......................................................................................78
                Geometria postrzegania 3D......................................................................................82
                Algorytmy syntezy głębi..........................................................................................84
                   Sześcian 3D......................................................................................................87
                   Kula 3D ...........................................................................................................89
                Eksperymenty z bazą ..............................................................................................92
                Porządkowanie sceny..............................................................................................95
Rozdział 6. Fotografia relatywistyczna ................................................................ 103
                Teoria fotografii relatywistycznej ........................................................................... 104
                Obiekt TRelatyw3d............................................................................................... 107
                   Relatywistyczny krzy ..................................................................................... 112
                   Relatywistyczna kostka ................................................................................... 114
4                                                                                C++Builder. Symulacje komputerowe


               Zderzenie ze ścianą ............................................................................................... 116
                   Relatywistyczna autostrada .............................................................................. 119
                   Relatywistyczna kula....................................................................................... 120
               Relatywistyka a kąt widzenia obiektywu.................................................................... 122
               Twoja fotografia ................................................................................................... 125
               Relatywistyczna stereoskopia................................................................................. 130
Rozdział 7. Algorytm wzrostu........................................................................... 137
               Rozwijanie tekstu ................................................................................................. 137
               Interpretacja formuły tekstowej.............................................................................. 140
               Bardziej zło one rozwinięcia ................................................................................. 145
               Wzrost 3D ........................................................................................................... 149
               L system, czyli hodowla form roślinnych ................................................................... 153
               Roślinny świat Lindenmayera ................................................................................ 159
               Jeszcze więcej parametrów .................................................................................... 162
Rozdział 8. Obrazy świetlnego promienia .......................................................... 175
               Idea techniki śledzenia promieni............................................................................. 176
               Wyznaczenie promienia rysującego ........................................................................ 177
               Promień szuka obiektów........................................................................................ 182
               Promień wyrusza w dalszą drogę............................................................................ 188
               Kolory ................................................................................................................. 192
               Zabudowa sceny................................................................................................... 194
               Implementacja ...................................................................................................... 195
                   Co dalej?........................................................................................................ 213
Dodatek A Funkcjonalne opisy klas ................................................................. 215
               Klasa TSkalowanie ............................................................................................... 215
               Klasa TDiagram.................................................................................................... 217
               Klasa TWidmo ..................................................................................................... 217
               Klasa TWykresPseudo3d....................................................................................... 217
               Klasy TPunkt, TLinia, TWektor............................................................................. 220
               Klasa T3d ............................................................................................................ 221
               Klasa TWykres3d ................................................................................................. 222
               Klasa TStereo....................................................................................................... 224
               Klasy TRelatyw3d i TRelatywStereo ...................................................................... 224
               Klasa TObraz ....................................................................................................... 224
               Literatura ...................................................................................... 229
               Skorowidz...................................................................................... 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ę KPENWFG RUGWFQFJ ,
          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 6KCITCO. Wreszcie, uruchomimy KVGTCVQT
     kreślący wykres:
       XQKF AAHCUVECNN 6(QTO(QTO2CKPV
61DLGEV
5GPFGT
       ]
         KPV OCTI   ZG [G ZG [G   YURÎ TúFPG GMTCPQYG QFEKPMC
         69[MTGU2UGWFQF Y
 OCTI OCTI  %NKGPV9KFVJ  %NKGPV*GKIJV
OCTI
       %NKGPV*GKIJV
OCTI    
         YKPKELWLAKVGTCVQT
                WTWEJQOKGPKG KVGTCVQTC
         YJKNG
 YKVGTCVQT
 ZG [G ZG [G RúVNC MTG NæEC Y[MTGU
         ]
           %CPXCU  /QXG6Q
 ZG [G        Y[MTG NGPKG QFEKPMC Y[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:
          FQWDNG 69[MTGU2UGWFQF  HWP
 FQWDNG Z FQWDNG [
          ]
            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:
          ENCUU 69[MTGU2UGWFQF
          ]
            RTKXCVG
              
            RWDNKE
              69[MTGU2UGWFQF
       MQPUVTWMVQT
              
              XKTVWCN FQWDNG HWP
 FQWDNG Z FQWDNG [
              
          _

        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:
          ENCUU 6/QL9[MTGU  69[MTGU2UGWFQF      FKGFKEGPKG
          ]
            RTKXCVG
              
            RWDNKE
              6/ÎL9[MTGU
          MQPUVTWMVQT
              
              FQWDNG HWP
 FQWDNG Z FQWDNG [   PQYC HWPMELC
              
          _

        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:
         KPENWFG RUGWFQFJ
       
       ENCUU 6(CNC2NCUMC  RWDNKE 69[MTGU2UGWFQF
       ]
         RWDNKE
           6(CNC2NCUMC
 KPV ZG KPV [G KPV GUGT KPV GY[U FQWDNG ZT FQWDNG [T
       FQWDNG TUGT FQWDNG TY[U
           FQWDNG HWP
 FQWDNG Z FQWDNG [
       _
       
       ENCUU 6(QTO  RWDNKE 6(QTO
       ]
       AARWDNKUJGF        +'OCPCIGF %QORQPGPVU
            XQKF AAHCUVECNN (QTO2CKPV
61DLGEV
5GPFGT
         RTKXCVG         7UGT FGENCTCVKQPU
         RWDNKE         7UGT FGENCTCVKQPU
            AAHCUVECNN 6(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(CNC2NCUMC  6(CNC2NCUMC
 KPV ZG KPV [G KPV GUGT KPV GY[U FQWDNG ZT
       FQWDNG [T FQWDNG TUGT FQWDNG TY[U
             69[MTGU2UGWFQF
 ZG [G GUGT GY[U ZT [T TUGT TY[U
       ]
Rozdział 3. ♦ Fale na wodzie                                                                        35

           _
           
           FQWDNG 6(CNC2NCUMC  HWP
 FQWDNG Z FQWDNG [
           ]
             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:
           XQKF AAHCUVECNN 6(QTO(QTO2CKPV
61DLGEV
5GPFGT
           ]
             6(CNC2NCUMC HR
 OCTI OCTI  %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 [  #

More Related Content

What's hot

Fotografia cyfrowa. Wydanie drugie
Fotografia cyfrowa. Wydanie drugieFotografia cyfrowa. Wydanie drugie
Fotografia cyfrowa. Wydanie drugie
Wydawnictwo Helion
 
Fotografia cyfrowa. Kurs
Fotografia cyfrowa. KursFotografia cyfrowa. Kurs
Fotografia cyfrowa. Kurs
Wydawnictwo Helion
 
ABC fotografii cyfrowej i obróbki zdjęć
ABC fotografii cyfrowej i obróbki zdjęćABC fotografii cyfrowej i obróbki zdjęć
ABC fotografii cyfrowej i obróbki zdjęć
Wydawnictwo Helion
 
Fotografia cyfrowa. Edycja zdjęć
Fotografia cyfrowa. Edycja zdjęćFotografia cyfrowa. Edycja zdjęć
Fotografia cyfrowa. Edycja zdjęć
Wydawnictwo Helion
 
Visual Basic .NET. Ćwiczenia
Visual Basic .NET. ĆwiczeniaVisual Basic .NET. Ćwiczenia
Visual Basic .NET. Ćwiczenia
Wydawnictwo Helion
 
ABC grafiki komputerowej
ABC grafiki komputerowejABC grafiki komputerowej
ABC grafiki komputerowej
Wydawnictwo Helion
 
Fotografia cyfrowa. Świat w obiektywie. Wydanie II
Fotografia cyfrowa. Świat w obiektywie. Wydanie IIFotografia cyfrowa. Świat w obiektywie. Wydanie II
Fotografia cyfrowa. Świat w obiektywie. Wydanie II
Wydawnictwo Helion
 
Photoshop CS. Ćwiczenia praktyczne
Photoshop CS. Ćwiczenia praktycznePhotoshop CS. Ćwiczenia praktyczne
Photoshop CS. Ćwiczenia praktyczne
Wydawnictwo Helion
 
CorelDRAW 11. Vademecum profesjonalisty. Tom 2
CorelDRAW 11. Vademecum profesjonalisty. Tom 2CorelDRAW 11. Vademecum profesjonalisty. Tom 2
CorelDRAW 11. Vademecum profesjonalisty. Tom 2
Wydawnictwo Helion
 
Techniki obróbki zdjęć cyfrowych. Praktyczne projekty
Techniki obróbki zdjęć cyfrowych. Praktyczne projektyTechniki obróbki zdjęć cyfrowych. Praktyczne projekty
Techniki obróbki zdjęć cyfrowych. Praktyczne projekty
Wydawnictwo Helion
 
Aplikacje Direct3D
Aplikacje Direct3DAplikacje Direct3D
Aplikacje Direct3D
Wydawnictwo Helion
 
Fotografia cyfrowa. Edycja zdjęć. Wydanie III
Fotografia cyfrowa. Edycja zdjęć. Wydanie IIIFotografia cyfrowa. Edycja zdjęć. Wydanie III
Fotografia cyfrowa. Edycja zdjęć. Wydanie III
Wydawnictwo Helion
 
CorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczneCorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczne
Wydawnictwo Helion
 
Programowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdegoProgramowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdego
Wydawnictwo Helion
 
3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne
Wydawnictwo Helion
 
100 sposobów na Flash
100 sposobów na Flash100 sposobów na Flash
100 sposobów na Flash
Wydawnictwo Helion
 

What's hot (16)

Fotografia cyfrowa. Wydanie drugie
Fotografia cyfrowa. Wydanie drugieFotografia cyfrowa. Wydanie drugie
Fotografia cyfrowa. Wydanie drugie
 
Fotografia cyfrowa. Kurs
Fotografia cyfrowa. KursFotografia cyfrowa. Kurs
Fotografia cyfrowa. Kurs
 
ABC fotografii cyfrowej i obróbki zdjęć
ABC fotografii cyfrowej i obróbki zdjęćABC fotografii cyfrowej i obróbki zdjęć
ABC fotografii cyfrowej i obróbki zdjęć
 
Fotografia cyfrowa. Edycja zdjęć
Fotografia cyfrowa. Edycja zdjęćFotografia cyfrowa. Edycja zdjęć
Fotografia cyfrowa. Edycja zdjęć
 
Visual Basic .NET. Ćwiczenia
Visual Basic .NET. ĆwiczeniaVisual Basic .NET. Ćwiczenia
Visual Basic .NET. Ćwiczenia
 
ABC grafiki komputerowej
ABC grafiki komputerowejABC grafiki komputerowej
ABC grafiki komputerowej
 
Fotografia cyfrowa. Świat w obiektywie. Wydanie II
Fotografia cyfrowa. Świat w obiektywie. Wydanie IIFotografia cyfrowa. Świat w obiektywie. Wydanie II
Fotografia cyfrowa. Świat w obiektywie. Wydanie II
 
Photoshop CS. Ćwiczenia praktyczne
Photoshop CS. Ćwiczenia praktycznePhotoshop CS. Ćwiczenia praktyczne
Photoshop CS. Ćwiczenia praktyczne
 
CorelDRAW 11. Vademecum profesjonalisty. Tom 2
CorelDRAW 11. Vademecum profesjonalisty. Tom 2CorelDRAW 11. Vademecum profesjonalisty. Tom 2
CorelDRAW 11. Vademecum profesjonalisty. Tom 2
 
Techniki obróbki zdjęć cyfrowych. Praktyczne projekty
Techniki obróbki zdjęć cyfrowych. Praktyczne projektyTechniki obróbki zdjęć cyfrowych. Praktyczne projekty
Techniki obróbki zdjęć cyfrowych. Praktyczne projekty
 
Aplikacje Direct3D
Aplikacje Direct3DAplikacje Direct3D
Aplikacje Direct3D
 
Fotografia cyfrowa. Edycja zdjęć. Wydanie III
Fotografia cyfrowa. Edycja zdjęć. Wydanie IIIFotografia cyfrowa. Edycja zdjęć. Wydanie III
Fotografia cyfrowa. Edycja zdjęć. Wydanie III
 
CorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczneCorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczne
 
Programowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdegoProgramowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdego
 
3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne
 
100 sposobów na Flash
100 sposobów na Flash100 sposobów na Flash
100 sposobów na Flash
 

Viewers also liked

Sound Blaster Live! Przewodnik po karcie dźwiękowej
Sound Blaster Live! Przewodnik po karcie dźwiękowejSound Blaster Live! Przewodnik po karcie dźwiękowej
Sound Blaster Live! Przewodnik po karcie dźwiękowej
Wydawnictwo Helion
 
DirectX. Rendering w czasie rzeczywistym
DirectX. Rendering w czasie rzeczywistymDirectX. Rendering w czasie rzeczywistym
DirectX. Rendering w czasie rzeczywistym
Wydawnictwo Helion
 
AutoCAD 2004 PL
AutoCAD 2004 PLAutoCAD 2004 PL
AutoCAD 2004 PL
Wydawnictwo Helion
 
Delphi 7. Ćwiczenia zaawansowane
Delphi 7. Ćwiczenia zaawansowaneDelphi 7. Ćwiczenia zaawansowane
Delphi 7. Ćwiczenia zaawansowane
Wydawnictwo Helion
 
AutoCAD 2004
AutoCAD 2004AutoCAD 2004
AutoCAD 2004
Wydawnictwo Helion
 
Bezpieczeństwo w sieciach Windows
Bezpieczeństwo w sieciach WindowsBezpieczeństwo w sieciach Windows
Bezpieczeństwo w sieciach Windows
Wydawnictwo Helion
 
AutoCAD 2004. Pierwsze kroki
AutoCAD 2004. Pierwsze krokiAutoCAD 2004. Pierwsze kroki
AutoCAD 2004. Pierwsze kroki
Wydawnictwo Helion
 
Oracle9i. Administrowanie bazami danych od podstaw
Oracle9i. Administrowanie bazami danych od podstawOracle9i. Administrowanie bazami danych od podstaw
Oracle9i. Administrowanie bazami danych od podstaw
Wydawnictwo Helion
 

Viewers also liked (8)

Sound Blaster Live! Przewodnik po karcie dźwiękowej
Sound Blaster Live! Przewodnik po karcie dźwiękowejSound Blaster Live! Przewodnik po karcie dźwiękowej
Sound Blaster Live! Przewodnik po karcie dźwiękowej
 
DirectX. Rendering w czasie rzeczywistym
DirectX. Rendering w czasie rzeczywistymDirectX. Rendering w czasie rzeczywistym
DirectX. Rendering w czasie rzeczywistym
 
AutoCAD 2004 PL
AutoCAD 2004 PLAutoCAD 2004 PL
AutoCAD 2004 PL
 
Delphi 7. Ćwiczenia zaawansowane
Delphi 7. Ćwiczenia zaawansowaneDelphi 7. Ćwiczenia zaawansowane
Delphi 7. Ćwiczenia zaawansowane
 
AutoCAD 2004
AutoCAD 2004AutoCAD 2004
AutoCAD 2004
 
Bezpieczeństwo w sieciach Windows
Bezpieczeństwo w sieciach WindowsBezpieczeństwo w sieciach Windows
Bezpieczeństwo w sieciach Windows
 
AutoCAD 2004. Pierwsze kroki
AutoCAD 2004. Pierwsze krokiAutoCAD 2004. Pierwsze kroki
AutoCAD 2004. Pierwsze kroki
 
Oracle9i. Administrowanie bazami danych od podstaw
Oracle9i. Administrowanie bazami danych od podstawOracle9i. Administrowanie bazami danych od podstaw
Oracle9i. Administrowanie bazami danych od podstaw
 

Similar to C++ Builder. Symulacje komputerowe

Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistów
Wydawnictwo Helion
 
C++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowaniaC++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowania
Wydawnictwo Helion
 
Uczta programistów
Uczta programistówUczta programistów
Uczta programistów
Wydawnictwo Helion
 
Programowanie w języku C. FAQ
Programowanie w języku C. FAQProgramowanie w języku C. FAQ
Programowanie w języku C. FAQ
Wydawnictwo Helion
 
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązańWyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wydawnictwo Helion
 
Wzorce projektowe. Analiza kodu sposobem na ich poznanie
Wzorce projektowe. Analiza kodu sposobem na ich poznanieWzorce projektowe. Analiza kodu sposobem na ich poznanie
Wzorce projektowe. Analiza kodu sposobem na ich poznanie
Wydawnictwo Helion
 
Język Cg. Programowanie grafiki w czasie rzeczywistym
Język Cg. Programowanie grafiki w czasie rzeczywistymJęzyk Cg. Programowanie grafiki w czasie rzeczywistym
Język Cg. Programowanie grafiki w czasie rzeczywistym
Wydawnictwo Helion
 
ArchiCAD 10
ArchiCAD 10ArchiCAD 10
ArchiCAD 10
Wydawnictwo Helion
 
AutoCAD 2005
AutoCAD 2005AutoCAD 2005
AutoCAD 2005
Wydawnictwo Helion
 
C++. Sztuka programowania
C++. Sztuka programowaniaC++. Sztuka programowania
C++. Sztuka programowania
Wydawnictwo Helion
 
SolidWorks 2006 w praktyce
SolidWorks 2006 w praktyceSolidWorks 2006 w praktyce
SolidWorks 2006 w praktyce
Wydawnictwo Helion
 
C++. Inżynieria programowania
C++. Inżynieria programowaniaC++. Inżynieria programowania
C++. Inżynieria programowania
Wydawnictwo Helion
 
Solid Edge 17. Podstawy
Solid Edge 17. PodstawySolid Edge 17. Podstawy
Solid Edge 17. Podstawy
Wydawnictwo Helion
 
C++. Programowanie zorientowane obiektowo. Vademecum profesjonalisty
C++. Programowanie zorientowane obiektowo. Vademecum profesjonalistyC++. Programowanie zorientowane obiektowo. Vademecum profesjonalisty
C++. Programowanie zorientowane obiektowo. Vademecum profesjonalisty
Wydawnictwo Helion
 
Visual C# 2005 Express Edition. Od podstaw
Visual C# 2005 Express Edition. Od podstawVisual C# 2005 Express Edition. Od podstaw
Visual C# 2005 Express Edition. Od podstaw
Wydawnictwo Helion
 
C++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyC++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. Podstawy
Wydawnictwo Helion
 
Język C++. Koncepcje i techniki programowania
Język C++. Koncepcje i techniki programowaniaJęzyk C++. Koncepcje i techniki programowania
Język C++. Koncepcje i techniki programowania
Wydawnictwo Helion
 
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktykJęzyk C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
Wydawnictwo Helion
 
C++BuilderX. Ćwiczenia
C++BuilderX. ĆwiczeniaC++BuilderX. Ćwiczenia
C++BuilderX. Ćwiczenia
Wydawnictwo Helion
 
Język C. Wskaźniki. Vademecum profesjonalisty
Język C. Wskaźniki. Vademecum profesjonalistyJęzyk C. Wskaźniki. Vademecum profesjonalisty
Język C. Wskaźniki. Vademecum profesjonalisty
Wydawnictwo Helion
 

Similar to C++ Builder. Symulacje komputerowe (20)

Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistów
 
C++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowaniaC++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowania
 
Uczta programistów
Uczta programistówUczta programistów
Uczta programistów
 
Programowanie w języku C. FAQ
Programowanie w języku C. FAQProgramowanie w języku C. FAQ
Programowanie w języku C. FAQ
 
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązańWyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
 
Wzorce projektowe. Analiza kodu sposobem na ich poznanie
Wzorce projektowe. Analiza kodu sposobem na ich poznanieWzorce projektowe. Analiza kodu sposobem na ich poznanie
Wzorce projektowe. Analiza kodu sposobem na ich poznanie
 
Język Cg. Programowanie grafiki w czasie rzeczywistym
Język Cg. Programowanie grafiki w czasie rzeczywistymJęzyk Cg. Programowanie grafiki w czasie rzeczywistym
Język Cg. Programowanie grafiki w czasie rzeczywistym
 
ArchiCAD 10
ArchiCAD 10ArchiCAD 10
ArchiCAD 10
 
AutoCAD 2005
AutoCAD 2005AutoCAD 2005
AutoCAD 2005
 
C++. Sztuka programowania
C++. Sztuka programowaniaC++. Sztuka programowania
C++. Sztuka programowania
 
SolidWorks 2006 w praktyce
SolidWorks 2006 w praktyceSolidWorks 2006 w praktyce
SolidWorks 2006 w praktyce
 
C++. Inżynieria programowania
C++. Inżynieria programowaniaC++. Inżynieria programowania
C++. Inżynieria programowania
 
Solid Edge 17. Podstawy
Solid Edge 17. PodstawySolid Edge 17. Podstawy
Solid Edge 17. Podstawy
 
C++. Programowanie zorientowane obiektowo. Vademecum profesjonalisty
C++. Programowanie zorientowane obiektowo. Vademecum profesjonalistyC++. Programowanie zorientowane obiektowo. Vademecum profesjonalisty
C++. Programowanie zorientowane obiektowo. Vademecum profesjonalisty
 
Visual C# 2005 Express Edition. Od podstaw
Visual C# 2005 Express Edition. Od podstawVisual C# 2005 Express Edition. Od podstaw
Visual C# 2005 Express Edition. Od podstaw
 
C++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyC++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. Podstawy
 
Język C++. Koncepcje i techniki programowania
Język C++. Koncepcje i techniki programowaniaJęzyk C++. Koncepcje i techniki programowania
Język C++. Koncepcje i techniki programowania
 
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktykJęzyk C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
 
C++BuilderX. Ćwiczenia
C++BuilderX. ĆwiczeniaC++BuilderX. Ćwiczenia
C++BuilderX. Ćwiczenia
 
Język C. Wskaźniki. Vademecum profesjonalisty
Język C. Wskaźniki. Vademecum profesjonalistyJęzyk C. Wskaźniki. Vademecum profesjonalisty
Język C. Wskaźniki. Vademecum profesjonalisty
 

More from Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
Wydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
Wydawnictwo Helion
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
Wydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Wydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
Wydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Wydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Wydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
Wydawnictwo Helion
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
Wydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
Wydawnictwo Helion
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
Wydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
Wydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
Wydawnictwo Helion
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
Wydawnictwo Helion
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
Wydawnictwo Helion
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
Wydawnictwo Helion
 

More from Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

C++ Builder. Symulacje komputerowe

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI C++Builder. Symulacje komputerowe KATALOG KSI¥¯EK Autor: Andrzej Stasiewicz KATALOG ONLINE ISBN: 83-7361-052-9 Format: B5, stron: 238 ZAMÓW DRUKOWANY KATALOG Zawiera CD-ROM TWÓJ KOSZYK Nowoczesne techniki programowania i projektowania pozwalaj¹ pisaæ z³o¿one aplikacje DODAJ DO KOSZYKA 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 CENNIK I INFORMACJE zorientowane obiektowo wymaga przede wszystkim bardzo dok³adnych opisów funkcjonalnych obiektów; szczegó³y techniczne, realizatorskie i znajomo æ ich konstrukcji ZAMÓW INFORMACJE wewnêtrznej nie s¹ tu wa¿ne. O NOWO CIACH 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 ZAMÓW CENNIK 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æ CZYTELNIA i wykorzystywaæ we w³asnych programach. Osoby zainteresowane tajnikami programowania obiektowego poznaj¹ szczegó³y konstrukcji obiektów, przyrodnicy mog¹ FRAGMENTY KSI¥¯EK ONLINE 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) Wydawnictwo Helion Programowanie obiektowe jest to jedyna technika szybkiego tworzenia aplikacji ul. Chopina 6 z wykorzystaniem istniej¹cych, uniwersalnych algorytmów. Je li jeste interesujesz siê 44-100 Gliwice fizyk¹ czy biologi¹, ksi¹¿ka udowodni Ci, ¿e nie musisz koñczyæ studiów informatycznych, tel. (32)230-98-63 by modelowaæ komputerowo interesuj¹ce Ciê zjawiska. e-mail: helion@helion.pl
  • 2. Spis treści Wstęp ............................................................................................... 5 Rozdział 1. Widmo światła białego ....................................................................... 7 Wszystkie barwy tęczy..............................................................................................7 Rozdział 2. Drgania i fale proste ........................................................................ 15 Trochę fizyki ..........................................................................................................16 Parametry fali prostej ..............................................................................................16 Sumowanie dwóch fal prostych................................................................................20 Sumowanie drgań prostopadłych ..............................................................................23 Suma fal i kształtowanie impulsów...........................................................................25 Biorytmy................................................................................................................28 Rozdział 3. Fale na wodzie................................................................................. 31 Powierzchniowa fala płaska .....................................................................................31 Fala kolista.............................................................................................................36 Interferencja fal na wodzie.......................................................................................41 Rozdział 4. Interferencja światła........................................................................ 47 Doświadczenie Younga ...........................................................................................47 Przestrzenny obraz interferencji światła .........................................................................54 Edytor układu otworków .........................................................................................62 Synteza obrazu rzeczywistego z obrazu interferencyjnego ..........................................69 Filtracja przestrzenna ..............................................................................................72 Rozdział 5. Postrzeganie głębi ........................................................................... 77 Trzy techniki syntezy głębi ......................................................................................78 Geometria postrzegania 3D......................................................................................82 Algorytmy syntezy głębi..........................................................................................84 Sześcian 3D......................................................................................................87 Kula 3D ...........................................................................................................89 Eksperymenty z bazą ..............................................................................................92 Porządkowanie sceny..............................................................................................95 Rozdział 6. Fotografia relatywistyczna ................................................................ 103 Teoria fotografii relatywistycznej ........................................................................... 104 Obiekt TRelatyw3d............................................................................................... 107 Relatywistyczny krzy ..................................................................................... 112 Relatywistyczna kostka ................................................................................... 114
  • 3. 4 C++Builder. Symulacje komputerowe Zderzenie ze ścianą ............................................................................................... 116 Relatywistyczna autostrada .............................................................................. 119 Relatywistyczna kula....................................................................................... 120 Relatywistyka a kąt widzenia obiektywu.................................................................... 122 Twoja fotografia ................................................................................................... 125 Relatywistyczna stereoskopia................................................................................. 130 Rozdział 7. Algorytm wzrostu........................................................................... 137 Rozwijanie tekstu ................................................................................................. 137 Interpretacja formuły tekstowej.............................................................................. 140 Bardziej zło one rozwinięcia ................................................................................. 145 Wzrost 3D ........................................................................................................... 149 L system, czyli hodowla form roślinnych ................................................................... 153 Roślinny świat Lindenmayera ................................................................................ 159 Jeszcze więcej parametrów .................................................................................... 162 Rozdział 8. Obrazy świetlnego promienia .......................................................... 175 Idea techniki śledzenia promieni............................................................................. 176 Wyznaczenie promienia rysującego ........................................................................ 177 Promień szuka obiektów........................................................................................ 182 Promień wyrusza w dalszą drogę............................................................................ 188 Kolory ................................................................................................................. 192 Zabudowa sceny................................................................................................... 194 Implementacja ...................................................................................................... 195 Co dalej?........................................................................................................ 213 Dodatek A Funkcjonalne opisy klas ................................................................. 215 Klasa TSkalowanie ............................................................................................... 215 Klasa TDiagram.................................................................................................... 217 Klasa TWidmo ..................................................................................................... 217 Klasa TWykresPseudo3d....................................................................................... 217 Klasy TPunkt, TLinia, TWektor............................................................................. 220 Klasa T3d ............................................................................................................ 221 Klasa TWykres3d ................................................................................................. 222 Klasa TStereo....................................................................................................... 224 Klasy TRelatyw3d i TRelatywStereo ...................................................................... 224 Klasa TObraz ....................................................................................................... 224 Literatura ...................................................................................... 229 Skorowidz...................................................................................... 231
  • 4. 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.
  • 5. 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ę KPENWFG RUGWFQFJ , 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 6KCITCO. Wreszcie, uruchomimy KVGTCVQT kreślący wykres: XQKF AAHCUVECNN 6(QTO(QTO2CKPV 61DLGEV
  • 6. 5GPFGT ] KPV OCTI ZG [G ZG [G YURÎ TúFPG GMTCPQYG QFEKPMC 69[MTGU2UGWFQF Y OCTI OCTI %NKGPV9KFVJ %NKGPV*GKIJV
  • 7. OCTI %NKGPV*GKIJV
  • 8. OCTI YKPKELWLAKVGTCVQT WTWEJQOKGPKG KVGTCVQTC YJKNG YKVGTCVQT ZG [G ZG [G RúVNC MTG NæEC Y[MTGU ] %CPXCU /QXG6Q ZG [G Y[MTG NGPKG QFEKPMC Y[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?
  • 9. 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: FQWDNG 69[MTGU2UGWFQF HWP FQWDNG Z FQWDNG [ ] 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: ENCUU 69[MTGU2UGWFQF ] RTKXCVG RWDNKE 69[MTGU2UGWFQF MQPUVTWMVQT XKTVWCN FQWDNG HWP FQWDNG Z FQWDNG [ _ 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: ENCUU 6/QL9[MTGU 69[MTGU2UGWFQF FKGFKEGPKG ] RTKXCVG RWDNKE 6/ÎL9[MTGU MQPUVTWMVQT FQWDNG HWP FQWDNG Z FQWDNG [ PQYC HWPMELC _ 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.
  • 10. 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: KPENWFG RUGWFQFJ ENCUU 6(CNC2NCUMC RWDNKE 69[MTGU2UGWFQF ] RWDNKE 6(CNC2NCUMC KPV ZG KPV [G KPV GUGT KPV GY[U FQWDNG ZT FQWDNG [T FQWDNG TUGT FQWDNG TY[U FQWDNG HWP FQWDNG Z FQWDNG [ _ ENCUU 6(QTO RWDNKE 6(QTO ] AARWDNKUJGF +'OCPCIGF %QORQPGPVU XQKF AAHCUVECNN (QTO2CKPV 61DLGEV
  • 11. 5GPFGT RTKXCVG 7UGT FGENCTCVKQPU RWDNKE 7UGT FGENCTCVKQPU AAHCUVECNN 6(QTO 6%QORQPGPV
  • 12. 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(CNC2NCUMC 6(CNC2NCUMC KPV ZG KPV [G KPV GUGT KPV GY[U FQWDNG ZT FQWDNG [T FQWDNG TUGT FQWDNG TY[U 69[MTGU2UGWFQF ZG [G GUGT GY[U ZT [T TUGT TY[U ]
  • 13. Rozdział 3. ♦ Fale na wodzie 35 _ FQWDNG 6(CNC2NCUMC HWP FQWDNG Z FQWDNG [ ] TGVWTP
  • 14. 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: XQKF AAHCUVECNN 6(QTO(QTO2CKPV 61DLGEV
  • 15. 5GPFGT ] 6(CNC2NCUMC HR OCTI OCTI %NKGPV9KFVJ %NKGPV*GKIJV
  • 17. 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ł.
  • 18. 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 [ #
  • 19. UKP
  • 20. RK .
  • 21. 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: FQWDNG T USTV Z
  • 22. Z [
  • 23. [ 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: RTGFGHKPKQYCPC HWPMELC QDKGMVW RQFUVCYQYGIQ FQWDNG 6(CNC-QNKUVC HWP FQWDNG Z FQWDNG [ ] FQWDNG T USTV Z
  • 24. Z [
  • 25. [ TGVWTP
  • 26. 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
  • 27. UKP
  • 28. RK .
  • 29. T HK
  • 30. 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 62WPMV QDU RQ[ELC QDUGTYCVQTC 62WPMV QUY RQ[ELC RWPMVW Q YKGVNCLæEGIQ FQWDNG ZT [T TUGT TY[U QDUCT HWPMELK KPV KNAZ KNA[ NKEDC RQFKC ÎY FKGFKP[ KPV ZG [G GUGT GY[U QMPQ GMTCPQYG FQWDNG QFNAGMT UGTAGMT Y[UAGMT QRKU GMTCPW 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ę).
  • 31. 38 C++Builder. Symulacje komputerowe Oto typowa fraza definiowania zmiennej typu 69[MTGUF: 62WPMV QDUGTYCVQT 62WPMV QUYKGVNGPKG 69[MTGUF YF QDUGTYCVQT RQ[ELC QDUGTYCVQTC QUYKGVNGPKG RQ[ELC RWPMVW Q YKGVNCLæEGIQ QDUCT HWPMELK FQM CFPQ è MTG NGPKC NGY[ IÎTP[ TÎI QMKGPMC %NKGPV9KFVJ %NKGPV*GKIJV QMPQ GMTCPQYG Jak przed chwilą, wykreślany kształt zadajemy wirtualną funkcją dwóch zmiennych: XKTVWCN FQWDNG HWP FQWDNG Z FQWDNG [ HWPMELC FQ Y[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: FQWDNG HWP FQWDNG Z FQWDNG [ ] 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: XQKF KPKELWLAKVGTCVQT XQKF RQEæVGM MTG NGPKC DQQN KVGTCVQT MTG NGPKG GNGOGPV RQ GNGOGPEKG FQRÎMK VTWG KPV ZG [G ZG [G ZG [G ZG [G LCUPQUE
  • 32. 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: KPV ZG [G ZG [G ZG [G ZG [G LCUP YFKPKELWLAKVGTCVQT YJKNG YFKVGTCVQT ZG [G ZG [G ZG [G ZG [G LCUP ] COKG LCUP PC FQYQNP[ MQNQT 4GEVCPING ZG [G ZG [G ZG [G ZG [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: ENCUU 69[MTGU RWDNKE 69[MTGUF ] RTKXCVG RWDNKE 69[MTGU 62WPMV QDU 62WPMV QUY FQWDNG ZT FQWDNG [T FQWDNG TUGT FQWDNG TY[U KPV KNAZ KPV KNA[ KPV ZG KPV [G KPV GUGT KPV GY[U FQWDNG HWP FQWDNG Z FQWDNG [ _
  • 33. 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: -QPUVTWMVQT QDKGMVW MTG NæEGIQ 69[MTGU 69[MTGU 62WPMV QDU 62WPMV QUY FQWDNG ZT FQWDNG [T FQWDNG TUGT FQWDNG TY[U KPV KNAZ KPV KNA[ KPV ZG KPV [G KPV GUGT KPV GY[U 69[MTGUF QDU QUY ZT [T TUGT TY[U KNAZ KNA[ ZG [G GUGT GY[U ] _ 2TGFGHKPKQYCPC HWPMELC QDKGMVW RQFUVCYQYGIQ (CNC MQNKUVC Y[ICUCLæEC Y[M CFPKEQ FQWDNG 69[MTGU HWP FQWDNG Z FQWDNG [ ] FQWDNG T USTV Z
  • 34. Z [
  • 35. [ TGVWTP
  • 36. GZR T
  • 37. 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: XQKF AAHCUVECNN 6(QTO(QTO2CKPV 61DLGEV
  • 38. 5GPFGT ] KPV OCTI 62WPMV QDU QUY 69[MTGU YF QDU RQ[ELC QDUGTYCVQTC QUY RQ[ELC RWPMVW Q YKGVNCLæEGIQ QDUCT HWPMELK FQM CFPQ è MTG NGPKC OCTI OCTI %NKGPV9KFVJ
  • 40. OCTIQMPQ GMTCPQYG KPV ZG [G ZG [G ZG [G ZG [G LCUP KPV C 62QKPV R= ? 6%QNQT MQNQT YFKPKELWLAKVGTCVQT RQEæVGM MTG NGPKC YJKNG YFKVGTCVQT ZG [G ZG [G ZG [G ZG [G LCUP ] R= ?Z ZG QRKU GNGOGPVCTPGIQ EYQTQMæVC R= ?[ [G R= ?Z ZG R= ?[ [G R= ?Z ZG R= ?[ [G R= ?Z ZG
  • 41. Rozdział 3. ♦ Fale na wodzie 41 R= ?[ [G R= ?Z ZG R= ?[ [G C KPV FQWDNGLCUP
  • 42. RQOQEPKEG MQNQT 6%QNQT4)$ C C C U[PVGC MQNQTW %CPXCU 2GP %QNQT MQNQT MQNQT NKPKK %CPXCU $TWUJ %QNQT MQNQT MQNQT Y[RG PKGPKC EYQTQMæ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%QNQT 4)$ KPV T KPV I KPV D 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.
  • 43. 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
  • 44. 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: FQWDNG 69[MTGU HWP FQWDNG Z FQWDNG [ ] FQWDNG . F F WIQ è HCNK K QFN TÎFG FQWDNG M T T T T USTV Z
  • 45. Z [
  • 46. [ QFNGI Q è QF RWPMVW OKúF[ TÎF COK T USTV ZF
  • 47. ZF [
  • 48. [ QFNGI Q è QF RKGTYUGIQ TÎF C T USTV Z F
  • 49. Z F [
  • 50. [ K QF FTWIKGIQ M
  • 51. /A2+ . TGVWTP GZR T
  • 52. EQU M
  • 53. T EQU M
  • 54. T YCTVQ è HWPMELK _
  • 55. 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: FQWDNG 69[MTGU HWP FQWDNG Z FQWDNG [ ] FQWDNG # . F M FQWDNG T T T T T T T T USTV Z
  • 56. Z [
  • 57. [ T USTV Z
  • 58. F
  • 59. Z
  • 60. F [
  • 61. [ T USTV Z
  • 62. F
  • 63. Z
  • 64. F [
  • 65. [ T USTV Z F
  • 66. Z F [
  • 67. [ T USTV Z F
  • 68. Z F [
  • 69. [ T USTV Z
  • 70. F
  • 71. Z
  • 72. F [
  • 73. [ T USTV Z
  • 74. F
  • 75. Z
  • 76. F [
  • 77. [ # GZR T M
  • 78. /A2+ . TGVWTP #
  • 79. EQU M
  • 85. 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).
  • 86. 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.