Download as pdf or txt
Download as pdf or txt
You are on page 1of 18

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

C++Builder. Symulacje
komputerowe
Autor: Andrzej Stasiewicz
ISBN: 83-7361-052-9
Format: B5, stron: 238
Zawiera CD-ROM

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Nowoczesne techniki programowania i projektowania pozwalaj pisa zoone aplikacje


take osobom nie bdcym informatykami. Pasjonatom nauk przyrodniczych przychodzi
z pomoc projektowanie obiektowe: dziki zastosowaniu gotowych obiektw mog oni
symulowa komputerowo zjawiska wystpujce w przyrodzie. Programowanie
zorientowane obiektowo wymaga przede wszystkim bardzo dokadnych opisw
funkcjonalnych obiektw; szczegy techniczne, realizatorskie i znajomo ich konstrukcji
wewntrznej nie s tu wane.
Ksika C++Builder. Symulacje komputerowe przedstawia kilkanacie programw
symulujcych rozmaite zjawiska wystpujce w przyrodzie. Programy te zostay napisane
w jzyku C++ (uyto dialektu C++Builder Borlanda). Zastosowano w nich gotowe klasy,
ktre moesz odnale na doczonym do ksiki krku CD, mona je rozbudowywa
i wykorzystywa we wasnych programach. Osoby zainteresowane tajnikami
programowania obiektowego poznaj szczegy konstrukcji obiektw, przyrodnicy mog
pomin bardziej techniczne fragmenty i skoncentrowa si na modelowaniu zjawisk
przyrodniczych.
Programy opisane w ksice dotycz:
Widma wiata biaego
Drga i fal prostych
Fal na wodzie i ich interferencji
Interferencji wiata
Postrzegania gbi i geometrii 3D
Fotografii relatywistycznej
Algorytmw wzrostu
Tworzenia wirtualnych przestrzeni za pomoc techniki ledzenia promieni (ray-tracing)

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Programowanie obiektowe jest to jedyna technika szybkiego tworzenia aplikacji


z wykorzystaniem istniejcych, uniwersalnych algorytmw. Jeli jeste interesujesz si
fizyk czy biologi, ksika udowodni Ci, e nie musisz koczy studiw informatycznych,
by modelowa komputerowo interesujce Ci zjawiska.

Spis treci
Wstp ............................................................................................... 5
Rozdzia 1. Widmo wiata biaego ....................................................................... 7
Wszystkie barwy tczy..............................................................................................7

Rozdzia 2. Drgania i fale proste ........................................................................ 15


Troch fizyki ..........................................................................................................16
Parametry fali prostej ..............................................................................................16
Sumowanie dwch fal prostych................................................................................20
Sumowanie drga prostopadych ..............................................................................23
Suma fal i ksztatowanie impulsw...........................................................................25
Biorytmy................................................................................................................28

Rozdzia 3. Fale na wodzie................................................................................. 31


Powierzchniowa fala paska .....................................................................................31
Fala kolista.............................................................................................................36
Interferencja fal na wodzie.......................................................................................41

Rozdzia 4. Interferencja wiata........................................................................ 47


Dowiadczenie Younga ...........................................................................................47
Przestrzenny obraz interferencji wiata .........................................................................54
Edytor ukadu otworkw .........................................................................................62
Synteza obrazu rzeczywistego z obrazu interferencyjnego ..........................................69
Filtracja przestrzenna ..............................................................................................72

Rozdzia 5. Postrzeganie gbi ........................................................................... 77


Trzy techniki syntezy gbi ......................................................................................78
Geometria postrzegania 3D......................................................................................82
Algorytmy syntezy gbi..........................................................................................84
Szecian 3D......................................................................................................87
Kula 3D ...........................................................................................................89
Eksperymenty z baz ..............................................................................................92
Porzdkowanie sceny..............................................................................................95

Rozdzia 6. Fotografia relatywistyczna ................................................................ 103


Teoria fotografii relatywistycznej ........................................................................... 104
Obiekt TRelatyw3d............................................................................................... 107
Relatywistyczny krzy..................................................................................... 112
Relatywistyczna kostka ................................................................................... 114

C++Builder. Symulacje komputerowe


Zderzenie ze cian ............................................................................................... 116
Relatywistyczna autostrada .............................................................................. 119
Relatywistyczna kula....................................................................................... 120
Relatywistyka a kt widzenia obiektywu.................................................................... 122
Twoja fotografia ................................................................................................... 125
Relatywistyczna stereoskopia................................................................................. 130

Rozdzia 7. Algorytm wzrostu........................................................................... 137


Rozwijanie tekstu ................................................................................................. 137
Interpretacja formuy tekstowej.............................................................................. 140
Bardziej zoone rozwinicia ................................................................................. 145
Wzrost 3D ........................................................................................................... 149
L system, czyli hodowla form rolinnych ................................................................... 153
Rolinny wiat Lindenmayera ................................................................................ 159
Jeszcze wicej parametrw .................................................................................... 162

Rozdzia 8. Obrazy wietlnego promienia .......................................................... 175


Idea techniki ledzenia promieni............................................................................. 176
Wyznaczenie promienia rysujcego ........................................................................ 177
Promie szuka obiektw........................................................................................ 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 powicony doskonaleniu umiejtnoci wczania obiektw

i    do swoich aplikacji. Pretekstem byy nieskomplikowane zjawiska falowe, konkretnie tzw. fale proste. Teraz zmierzymy si z nieco powaniejszym
zagadnieniem falami powierzchniowymi. Fizyka opisywanych zjawisk nie bdzie
przy tym zbyt trudna, poniewa ograniczymy si do rzeczy zapewne znanych. Jednak
komputerowa wizualizacja fal powierzchniowych bdzie wymagaa wczenia do naszego warsztatu nowych obiektw, zdolnych do wykrelenia obrazw pacht funkcyjnych.

Powierzchniowa fala paska


Powierzchnia wody jest dwuwymiarowym, sprystym orodkiem, w ktrym mog
rozchodzi si zaburzenia. Czsteczka (w rzeczywistoci raczej grupa takich czsteczek)
wody wytrcona, np. kijem, z pooenia rwnowagi drga rytmicznie w gr i w d. Za
porednictwem si oddziaywania midzyczsteczkowego porusza inne, ssiednie czsteczki. Wwczas mamy do czynienia z rozchodzeniem si fali na powierzchni wody.
Przedstawimy taki obraz na ekranach monitorw. Nie bdziemy przy tym modelowa
tych wszystkich czsteczek i ich oddziaywa, tylko wymylimy matematyczny ksztat
dwuwymiarowej funkcji, ktrej wykres moliwie wiernie odda obraz prawdziwej fali.
Aplikacja pokae obraz powierzchniowej fali paskiej. Taka fala powstaje wtedy, gdy
czynnik zaburzajcy spokojn tafl wody ma ksztat dugiej linijki. Gdyby nagle poruszya si jedna ze cian basenu, po powierzchni wody zaczaby wdrowa fala paska. Termin fala paska cokolwiek oznacza powsta gwnie po to, by odrni
tak fal od powierzchniowej fali kolistej. Do fal kolistych przejdziemy potem, a teraz
wczmy komputery.
Zaczniemy od eksploatacji nieco zuboonego algorytmu, zamknitego w klasie 


. Algorytm ten, opisany ze strony funkcjonalnej w dodatku na kocu ksiki,
suy do prostego obrazowania powyginanych, dwuwymiarowych powierzchni (rysunek 3.1). Teraz skoncentrujmy si na sposobie wczania go do aplikacji.

32

C++Builder. Symulacje komputerowe

Rysunek 3.1. Obiekt TWykresPseudo3d nie nadaje si do bezporedniego wykorzystania,


bo potrafi tylko wykrela bahe, proste, paskie powierzchnie. Na szczcie, funkcja
odpowiedzialna za wykres jest zapowiedziana jako wirtualna, a to znaczy, e powinnimy
utworzy obiekt potomny, ktry przejmie cay ustrj TWykresPseudo3d, ale z wasn,
ju niewirtualn funkcj, odpowiadajc za ksztat wykresu

Przypomnijmy raz jeszcze schemat dziaania, prowadzcy do uzyskania stanu zerowego


aplikacji z dodatkowym moduem. Naley:
 zaoy nowy katalog roboczy,
 skopiowa do niego pliki nowego moduu, tym razem pseudo3d.h i pseudo3d.cpp
bdce nonikiem klasy 

,
 uruchomi Buildera i wczy do projektu pseudo3d.cpp,
 dopisa fraz  

,
 zapisa wszystko w katalogu roboczym.

Sprbujmy wszystko zrobi tak jak dotychczas. Wygenerujmy funkcj reakcj na


zdarzenie   (jest to funkcja odpowiedzialna za grafik okienka). Zadeklarujmy
tam egzemplarz klasy 

, tak jak podpowiada to intuicja i dotychczasowe
dowiadczenie z obiektami 
albo   . Wreszcie, uruchomimy 

krelcy wykres:

  
 


 
    
 !"#$   %& '(%&) '(*
%&) '(*   + + ,
-."./$,""'
'&$-$   ,,&0&1

%2(342$  ,0&"
%2(35$ ,
6
6

Konstruktor tworzy obiekt typu 



. Publiczna funkcja    ! 
 "#
rozpoczyna bieg algorytmu. Publiczny 
 dostarcza wsprzdne wszystkich odcinkw, ktre maj zoy si na wykres. Tylko gdzie jest nasza fala paska?

Rozdzia 3. Fale na wodzie

33

Algorytmy obiektu, zanim wykrel jakikolwiek punkt pachty funkcyjnej, musz przepyta jak funkcj o jej warto we wszystkich, istotnych dla krelenia punktach. Taka
funkcja jest wbudowana w obiekt. To rozwizanie ma jednak oczywist wad obiekt
kreli zawsze t sam pacht, tutaj paski prostokt. Wiem, co mwi. Oto wbudowana
w 

, trywialna funkcja, ktrej wykres rysuje obiekt:
     ! "# 

" 
6

Musimy j podmieni. W wiecie obiektw przewidziano tak sytuacj. Po pierwsze,


niech wykrelana funkcja bdzie rzeczywicie na stae wbudowana do obiektu, ale niech
to bdzie funkcja wirtualna, czyli moliwa do przedefiniowania:
& !"#

27
--"8&7
 !"#$---,"
--
   "# $
--6

Po drugie, uytkownicy naszego obiektu nie bd bezporednio korzysta z klasy




, tylko tzw. klasy potomnej. Klasa potomna odziedziczy wszystko po


, za wyjtkiem funkcji wirtualnej. Na jej miejsce napiszemy wasn,
ktra nie bdzie ju wirtualna:
  %      !&&'' '

27
--"8&7
4. $---,"
--  "# $&&( 
--6

Tak naprawd, uytkownik naszego obiektu 



 (w powyszej sytuacji
zwanego obiektem bazowym) niewiele si napracuje. Sama fraza dziedziczenia wymaga nikego zaangaowania w pisanie dwukropek i przytoczenie nazwy obiektu.
Napisanie konstruktora okae si bardzo atwe, gdy konstruktor $ 
"# ograniczy
si do wywoania konstruktora 

"#. A co z napisaniem funkcji %"#?
No c, akurat to jest konieczne, poniewa wanie nasz uytkownik ma pomys na
pacht funkcyjn.
Co mona powiedzie o dziedziczeniu i funkcjach wirtualnych? Jest to prawdziwa rewolucja w programowaniu. Dostajemy nowy, pachncy farb obiekt, ktry moemy
zmienia, nie bojc si, e co popsujemy. Algorytmy wirtualne s po to, by je zmienia, a cilej by na ich miejsce wprowadza wasne.

34

C++Builder. Symulacje komputerowe

Postawmy si na chwil w roli programisty (np. Borlanda) producenta obiektw.


Jednym z jego najbardziej odpowiedzialnych zada jest dokonanie wyboru, ktre algorytmy pisanego obiektu maj by wirtualne, czyli moliwe do przedefiniowania przez
przyszych uytkownikw. Jeli zabraknie gdzie sowa & , obiekt ju zawsze bdzie niezbyt elastyczny w uyciu, np. zawsze bdzie rysowa wykres paskiej powierzchni. Dziki wirtualnoci mog powstawa obiekty prawdziwie uniwersalne. Dopiero ostateczny uytkownik zadecyduje, co tak naprawd ma robi w obiekt.
Jeli w opisie obiektu widzimy jakie algorytmy opatrzone fraz 2"&, naley si
zastanowi, czy nie warto utworzy zupenie nowego obiektu, ktry bdzie potomkiem bazowego oryginau. W ten sposb mamy moliwo napisania nowej funkcji,
ktra zastpi wirtualny orygina.

Teraz napiszemy t aplikacj wzorcowo. Do powyszego schematu dziaania dodamy


tworzenie obiektu potomnego z konkretn (niebdc ju wirtualn) funkcj, opisujc
ksztat paskiej fali powierzchniowej.
W czci h moduu z form (mgby to te by nowy, specjalnie powoany do ycia modu) dopiszemy deklaracj nowej klasy:
9&":"#-':
--&;&!&7"8& !"#

"8&7
;&!&$    "8& "8&
"8& "8&,
"8&<"$"8& "8&,
6
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
&; 7"8&;

//"8&'7=>?( %
2//<&&;!$@8.*A,
27B&
"8&7B&
//<&&; $%*@,
6

Cz h zawiera wic deklaracje dwch klas naszej, powstaej z 




i klasy okienka, dodanej automatycznie przez Builder. Uwaajmy, by niczego nie popsu
w kodzie automatycznie wygenerowanym przez Borlanda. Nie zapomnijmy te o frazie
z pierwszej linii powyszego algorytmu, ktra informuje kompilator, co oznacza napis


.
Deklaracja obiektu o nazwie ' wprowadza dwa nowe algorytmy: swj konstruktor i funkcj przedefiniowujc wirtualny orygina. Musimy te algorytmy spisa
w czci CPP moduu:
       
")#
)#
 '#
( # ")#
 )#  '# ( 
    !")#)# '#( #")#)# '#( 


Rozdzia 3. Fale na wodzie

35

6
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
      "# 

"C*$,
6

Pierwsza z tych funkcji jest konstruktorem nowej klasy (dlatego, e nazywa si tak samo
jak klasa). Konstruktor ten nie robi nic poza wywoaniem konstruktora klasy bazowej
i przekazaniem mu wszystkich swoich argumentw. Fraza z dwukropkiem, czca dwa
nagwki konstruktorw, jest wymagana przez skadni jzyka.
Druga funkcja ma nagwek identyczny z jej wirtualnym oryginaem i wniknie w niuanse algorytmw, w ktrych uczestniczy jej pierwowzr. Obiekty nawet nie poznaj, e
kto zamieni funkcje.
Niewielka zmiana jest te w funkcji reakcji na zdarzenie  . Tworzymy tam
konkretny obiekt naszej, niewirtualnej ', ktra nie jest ju klas 


:

  
 


    <$   %& '(%&) '(* %&) '(
*   + + ,
--<-."./$,
---

Rysunek 3.2. Jeli klasa posiada wirtualne algorytmy, jest to sygna, e prawdopodobnie
moemy gboko ingerowa w jej funkcjonowanie. Naley tylko zrobi dwie rzeczy: utworzy
klas potomn i spisa w niej nowe wersje wirtualnych algorytmw. Ta blacha falista to niezbyt
ciekawy obraz paskiej fali powierzchniowej. Iterator wykresu umoliwia sprawdzenie, czy
krelony odcinek podjeda w gr czy te opada w d. Zastosowano tu inny schemat barwienia
zboczy rosncych i malejcych. Szczegy znajduj si na pycie CD

Jeeli kto chce eksperymentowa, to (gdy program bdzie ju gotowy) moe wrci
jeszcze raz do tekstu rdowego i usun sowo &  z deklaracji bazowej klasy


 czekajcy na modyfikacj. Cao powinna si skompilowa i uruchomi, lecz na ekranie znw pojawi si paska powierzchnia. Dlaczego? Obiekt potomny zawiera teraz dwie funkcje: gboko ukryty, niewirtualny orygina i nadpisujcy go
nowy egzemplarz. Jednoczenie wszystkie operacje tworzenia wykresu znajduj si
w klasie bazowej, zatem wany jest bazowy, nieciekawy, ale bliszy egzemplarz funkcji. Schemat podmieniania bazowych algorytmw nie zadziaa.

36

C++Builder. Symulacje komputerowe

Fala kolista
Powierzchnia wody jest rodowiskiem dwuwymiarowym. Dziki sprystoci oddziaywa midzy czsteczkami wody mog rozchodzi si w tym rodowisku dwuwymiarowe fale poprzeczne (tzn. takie, w ktrych wychylenie nie pokrywa si z kierunkiem
rozprzestrzeniania). Dziki swej powszechnoci, woda jest idealnym miejscem, umoliwiajcym obserwacj i badanie fal powierzchniowych.
Zaczniemy od matematycznego opisu takiej fali. Opisa fal, to znaczy poda wychylenie powierzchni wody w dowolnym punkcie "()#. Fale na wodzie (a raczej ich statyczny, zatrzymany w czasie obraz) s dane nastpujcym rwnaniem:
;$ ,
D*$*5*E<,

Dziki takiemu rwnaniu potrafimy wyliczy wychylenie powierzchni wody w dowolnym punkcie. W powyszym rwnaniu parametr * oznacza amplitud, + dugo
fali i % jej faz pocztkow. Parametry te s niemal identyczne z ich odpowiednikami we wczeniej omawianych falach prostych. O ile jednak uprzednio opisane cigi
falowe zaleay od jednej wsprzdnej (, tak koliste fale na wodzie (rysunek 3.3) zale
od odlegoci od centrum, w ktrym znajduje si drgajcy punkt, wymuszajcy powstawanie fali. Odlego ta jest zwyczajowo oznaczana liter :
"8&
F$*E*,

Rysunek 3.3. Powierzchniowa fala kolista, ktrej formua zawiera do istotny bd amplituda
nie maleje wraz z odlegoci

Jeszcze raz uyjemy mao efektownej klasy 



. Program waciwie niczym nie rni si od poprzedniego jedynie wprowadzana jest funkcja o innym ksztacie matematycznym:
<<".8" 
   * 
 "# 

"8&
F$*E*,
"C*$,
6

Prawdziwe, koliste fale na wodzie maj jeszcze jedn cech s tym sabsze, im
dalej odpyny (rysunek 3.4). Zatem ich amplituda zaley te od odlegoci:
;$ ,
D$,*$*5*E<,

Rozdzia 3. Fale na wodzie

37

Rysunek 3.4. Realistyczny obraz fali powierzchniowej musi zawiera czynnik tumicy amplitud
wraz ze wzrostem odlegoci im dalej, tym mniejsza fala. Oto wykres funkcji F(x, y) = 50
exp(r / 100) cos(r). Funkcja ta maleje wraz z odlegoci

W powyszym rwnaniu amplituda jest malejc funkcj odlegoci.


Teraz sporzdzimy bardziej realistyczny wykres fali kolistej. Zmienimy narzdzie krelce pacht i, zamiast ubogiego typu 

, wprowadzimy bardziej zaawansowany 
. Klasa ta jest potomkiem obiektu , zajmujcego si wykrelaniem
perspektywicznych rzutw terenu. Implementuje te owietlenie pachty. Przebadajmy
ksztaty publicznych algorytmw 
.
Najwaniejszy jest konstruktor algorytm sucy do tworzenia konkretnego egzemplarza obiektu typu 
:
 #$
!"8 .8
!" .""0&.1 
"8&    8<".
&/ &/ &8
    
"8&&/
-+ /
/
,"

Trzy ostatnie argumenty maj swoje wartoci domylne, zatem w konkretnej sytuacji
moe ich po prostu nie by. Oznacza to pozostanie przy predefiniowanych wartociach
odlegoci od ekranu i jego rozpitoci w metrach.
Obiekt 
 (a raczej jego przodek ) zakada, e obserwowana rzeczywisto
spoczywa w pobliu pocztku ukadu wsprzdnych. Mwic inaczej, stoek widzenia
jest zawsze skierowany do rodka. To pewne uproszczenie w stosunku do takich bibliotek, jak np. OpenGL. Jednak dziki temu wystarczy zada pozycj obserwatora, ktrego
wsprzdne widzimy jako trzy pierwsze argumenty konstruktora.
Trzy kolejne argumenty to pozycja punktu owietlajcego. Obiekt analizuje wzajemn
zaleno pooe obserwatora, punktu owietlajcego oraz usytuowania obserwowanej
powierzchni i na podstawie tych danych wylicza jasno owietlenia.
Potem widzimy cztery parametry okrelajce wycinek matematycznej powierzchni, nad
ktr jest zadana funkcja (czyli dziedzin funkcji).
Dalej mamy dwa parametry okrelajce liczb podziaw pachty na elementarne czworokty i wreszcie pooenie oraz rozmiary okienka ekranowego (przeznaczonego na
grafik).

38

C++Builder. Symulacje komputerowe

Oto typowa fraza definiowania zmiennej typu 


:
!"8$ -  - + -,
!"&$(+-  -  -,
 ##$8 .8
& .""0&.1 
 -  - + - + - 8<".
G G 0H0&
  &  
%& ' %&) ',

Jak przed chwil, wykrelany ksztat zadajemy wirtualn funkcj dwch zmiennych:
2"&"8&<"$"8& "8&,<".

Funkcja ta musi by okrelona w dziedzinie niedawno zdefiniowanej w konstruktorze


klasy. Wirtualno funkcji sugeruje, e bdziemy musieli utworzy obiekt potomny,
czyli obiekt dziedziczcy waciwoci niniejszego obiektu. Jeli zaniechamy tej czynnoci, bdziemy zmuszeni do obserwacji bahego pierwowzoru oryginalnej funkcji:
"8&<"$"8& "8&,

" 
6

Pierwowzr ten znw jest niezwykle prost pacht, speniajc wymagania algorytmu.

Rysunek 3.5. Funkcja wirtualna niekiedy nic nie robi (ma puste ciao) lub robi zbyt mao,
jak np. na powyszym rysunku, gdzie wida wykres funkcji f(x, y) = 0. Obecno funkcji
wirtualnej jest zaproszeniem do tworzenia obiektu potomnego, w ktrym funkcj wirtualn
zastpi penowartociowy algorytm

Za krelenie pachty funkcyjnej odpowiada specjalny 


 . Stanowi go para funkcji:
2."./$2,10&
8&$0&&& "
I I I I I# I# IJ IJ I.,

Rozdzia 3. Fale na wodzie

39

,
 kolejno dostarcza wsprzdne wszystkich wieloktw, ktre zo si na

pacht, a dodatkowo informuje o procentowej jasnoci ich owietlenia. Typowe frazy


krelenia pachty 

 to:
    # # J J .
#-."./$,
'&$#-$    # # J J .,,

:K.&&:
L &$    # # J J,
6

Ten, nieco umowny, algorytm ilustruje to, co trzeba, czyli uruchomienie 


 ,
pozyskiwanie wsprzdnych i koloru kadego z elementarnych wieloktw pachty
i wykrelanie go.
Napiszmy teraz prawdziwy program, ilustrujcy srebrzyst powierzchni wody, ktr
w jednym punkcie kto dotkn kijem. W katalogu roboczym niech znajd si pliki
rdowe klasy 
, a w zwizku z tym take klasy , bo to ona jest przodkiem 
. Poniewa pojawi si te napis , do katalogu dodamy te modu geometria. Po uruchomieniu Buildera do przestrzeni aplikacji (do projektu) doczymy pliki cpp tych trzech moduw (rysunek 3.6).

Rysunek 3.6. Wszystkie moduy, nawet te, do ktrych nie odwoujemy si bezporednio,
musz by wyszczeglnione w projekcie. Projekt jest spisem treci aplikacji

Dysponujc stanem zerowym aplikacji, czyli poprawnie skompletowanym projektem, tworzymy klas potomn. W czci H moduu z okienkiem wpisujemy frazy dziedziczenia:
& 7"8& #

27
"8&7
 $!"8 !"
"8& "8& "8& "8&
&/ &/
   ,
"8&<"$"8& "8&,
6

40

C++Builder. Symulacje komputerowe

Powysza deklaracja zapowiada klas potomn, zatem przejmujc cae wntrze klasy

, zaopatrzon jednak w dwa wasne algorytmy. W czci CPP spiszemy ciaa
tych algorytmw:
M"8"0&1 
     
 
 # 
 (#
 ")# )#  '# ( #

 "#
 #

")#
)#
 '#
( 
   ! # (#
")#)# '#( #
 "# #")#)# '#( 

6
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
!<<".8" 
;&& .1     "# 

"8&
F$*E*,
"#- *$(* - ,*$,
6

Konstruktor nie robi nic, a cilej ogranicza si do wywoania konstruktora klasy bazowej. Funkcja zastpujca wirtualny orygina wykrela pacht, bdc powierzchniowym
kosinusem, wykadniczo gasncym wraz z odlegoci.
Naley jeszcze wygenerowa i napisa najwaniejsz funkcj reakcj na zdarzenie
 :

  
 


 
 
!"8$ -  - + -, $(+-  -  -,
 #$8 .8
 .""0&.1 
 -  - + - + - 8<".
G G 0H0&
 
%& '(* %&) '(* ,
    # # J J .

!N+O
%&&
#-."./$,10&
'&$#-$    # # J J .,,

N O-
 & 1
N O-
 
N O-

N O-

NO-
#
NO-
#
N#O-
J

Rozdzia 3. Fale na wodzie

41

N#O-
J
NJO-
 
NJO-
 

$,$$"8&,.*-+,
&
$%&,LPQ$  ,&"
%2(3!(3%&
&&&
%2(3Q"'(3%&
&&1
%2(3!& $ J,
6
6

W powyszym algorytmie biblioteczna funkcja  (wielokt) zmusza do wprowadzenia tablicy zmiennych typu  , poniewa wymaga jej jako argumentu.
Do barwienia elementw wykresu wykorzystalimy funkcj zamieniajc amplitudy
czerwieni, zieleni i bkitu na windowsow reprezentacj koloru:
%&LPQ$  8,

Rysunek 3.7. Wykres powierzchniowej fali kolistej, cieniowanej wiatem. Liczba podziaw
dziedziny, czyli liczba elementarnych wieloktw, okrelona w konstruktorze obiektu potomnego
TWykres, celowo jest za dua. Dziki temu lepiej widzimy struktur pachty

Interferencja fal na wodzie


No dobrze, ale przecie na wodzie powstaj nie tylko fale koliste czy paskie. Obraz pomarszczonej wody potrafi by bardzo zoony. W takiej sytuacji wykorzystujemy wane
prawo superpozycji cigw falowych:
Dowolny ukad zmarszczek mona wyrazi jako sum zbioru odpowiednio dobranych,
prostych fal kolistych.

Zasada ta nosi nazw zasady superpozycji fal albo zasady Huyghensa. U jej podstaw ley
teza, e fala to jaka mniej lub bardziej skomplikowana gra prostych wychyle czsteczek
z pooenia rwnowagi. A wychylenia si sumuj pod warunkiem, e nie s zbyt due.

42

C++Builder. Symulacje komputerowe

Jeli na powierzchni wody mamy dwa rda fal kolistych lub wicej, jest oczywistym,
e kady konkretny punkt powierzchni bdzie falowa pod wpywem kadej z tych fal.
Moliwe s rne sytuacje, np. punkt moe falowa z du amplitud, o ile spotykaj si
tam gry (albo doliny) fal kolistych, moe te zupenie nie falowa, o ile gra jednej
fali wpadnie tam w dolin drugiej.
Przy jakim nieregularnym rozkadzie rde fal kolistych obraz zaburze powierzchni
bdzie bardzo zoony i raczej nieciekawy. Istniej jednak specjalne konfiguracje rde, ktrym warto si przyjrze.
Z najprostsz sytuacj mamy do czynienia, gdy na wodzie znajduj si dwa rda fal
kolistych, ktre drgaj w tej samej fazie. Moemy sobie wyobrazi, e harmonicznie
(znaczy sinusoidalnie) uderzamy w wod dwuzbnym widelcem. Okazuje si, e w takiej, najprostszej sytuacji obserwujemy wielk regularno rozkadw wzmocnie i osabie fali wypadkowej.
Komputerowe fotografie 3.8 3.10 ilustruj wanie tak sytuacj. Na kolejnych zwiksza si odlego midzy rdami fal (oznaczona liter ). Prosz zauway, e obszary
interferencji konstruktywnej, czyli wzmacniania fali, rozkadaj si promienicie od centrum obrazu, w ktrym s umieszczone rda fal. Obszary interferencji destruktywnej,
czyli wygaszania si fal, te s rozoone promienicie i przedzielaj obszary interferencji konstruktywnej.

Rysunek 3.8. Fala o dugoci 4 cm jest wzbudzana w dwch miejscach odlegych od siebie
o 4 cm. Sabo widoczne s obszary interferencyjnych wzmocnie i osabie odlego rde
jest zbyt maa w porwnaniu z dugoci fali

Rysunek 3.9. Takie same fale, ale wzbudzane w miejscach odlegych od siebie o 10 cm.
Teraz obszary oddziaywa interferencyjnych s znacznie lepiej widoczne

Rozdzia 3. Fale na wodzie

43

Rysunek 3.10. rda fal s odlege o 20 cm. Wyranie wida kilka obszarw wzmocnie
i osabie, tzw. prkw interferencyjnych

Zjawiska te maj bardzo proste wyjanienie: wzmocnienie fal nastpuje tam, gdzie spotykaj si one w zblionej fazie (gra z gr, dolina z dolin). To z kolei nastpuje wtedy, gdy rnica drg przebytych przez obie fale rwna si zero lub jest wielokrotnoci
dugoci fali (rysunek 3.11).

Rysunek 3.11. W punkcie P nastpi wzmocnienie falowania (interferencja konstruktywna),


gdy rnica drg, po ktrych docieraj tam fale czstkowe, bdzie rwna cakowitej
wielokrotnoci dugoci fali L

Program, ktry wytworzy te obrazy, posuguje si obiektem 


, a cilej obiektem klasy potomnej. Jest to program bardzo podobny do poprzedniego. Jedynie funkcja,
odpowiadajca za ksztat pachty, ma tutaj posta nieco bardziej zoon, bo opisuje dwie
fale koliste, ktre rozchodz si z punktw przesunitych od siebie na odlego .
Obliczany oraz ostatecznie zwracany rezultat jest sum tych dwch fal:
     "# 

"8&5
J- 
J- " 0H<&&-R
"8&   

F$*E*,& 0H""R
 
F$$(,*$(,E*,& 0H R--
F$$E,*$E,E*,--"  

 -+*4/!=5
"$( - ,*$$* ,E$*,,0H<".
6

44

C++Builder. Symulacje komputerowe

Po przetestowaniu, co dzieje si, gdy dwa rda identycznych fal kolistych stopniowo
odsuwamy od siebie, spojrzymy na sytuacj, w ktrej takich rde jest coraz wicej.
Program komputerowy wymaga jedynie drobnej zmiany w ksztacie funkcji zadajcej
pacht powierzchni wody:
     "# 

"8&D 5
J- 
G- 
"8&   # J + S

F$*E*,
 
F$$(J*,*$(J*,E*,

F$$(*,*$(*,E*,
#
F$$(,*$(,E*,
J
F$$E,*$E,E*,
+
F$$E*,*$E*,E*,
S
F$$EJ*,*$EJ*,E*,
D
$( - ,

 -+*4/!=5
"D*$$* ,E$*,E$*#,E$*J,E$*+,E$*S,,
6

Zmiana funkcji ma charakter ilociowy, bowiem przybyo rwnoodlegych rde fal.


Jak zwikszanie liczby rde wpywa na rozkad interferencyjnych wzmocnie i osabie falowania? Okazuje si, e obszary wzmocnie i osabie s tym wyraniej zaznaczone, im wicej jest rde. Przede wszystkim zyskuje na sile prek zerowego rzdu,
lecy na wprost rde fal kolistych. Zjawisko to, wynikajce wycznie ze wspomnianych zasad sumowania si fal przybywajcych do kadego, konkretnego punktu w rnych fazach, ma ogromne zastosowania w optyce, przy produkcji tzw. siatek dyfrakcyjnych. Wkrtce zbadamy dowiadczalnie ten temat (rysunek 3.12, 3.13).

Rysunek 3.12. Obraz powierzchni wody pobudzanej do harmonicznych drga w piciu


rwnoodlegych punktach

Co si stanie, gdy przy tej samej konfiguracji rde fal kolistych bdziemy zwiksza
dugo fal? Rozumiejc istot powstawania obrazw interferencyjnych na powierzchni,
nietrudno przewidzie odpowied. Okazuje si, e w miar zwikszania dugoci fal,
obszary wzmocnie i osabie falowania odsuwaj si od siebie (rysunek 3.14).

Rozdzia 3. Fale na wodzie

45

Rysunek 3.13. Wraz z przybywaniem liczby punktw, rde fal kolistych, interferencja
konstruktywna koncentruje si w obszarach przed i za otworami. Interferencja jest tym
wyraniejsza, im wicej rde regularnie rozmieszczonych. Scena z rysunku 3.13 jest
ogldana z dalszej perspektywy, wyznaczonej pozycj obserwatora (5, 5, 3) metry

Rysunek 3.14. Dugo fali jest dwukrotnie krtsza ni na rysunku 3.13, pozostae
parametry s bez zmian

Na rysunku 3.14 powinnimy zauway, e obszary interferencji koncentruj si na


wprost ukadu punktw wymuszajcych falowanie. Zjawisko to ma wielkie znaczenie
w optyce, gdzie interferuj ze sob fale wietlne, np. wypuszczane z milionw otworkw
na powierzchni siatki dyfrakcyjnej. Fale wiata o rnej dugoci (czyli rnej barwie)
interferuj konstruktywnie w rnych miejscach. Siatka dyfrakcyjna, dziki zjawisku,
ktre wanie zbadalimy, dokonuje rozszczepienia wiata na barwy spektralne. Na tej
podstawie astronom potrafi odpowiedzie, jaki jest skad chemiczny wieccej materii.

You might also like