Professional Documents
Culture Documents
C++ Builder. Symulacje Komputerowe
C++ Builder. Symulacje Komputerowe
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
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
Wstp ............................................................................................... 5
Rozdzia 1. Widmo wiata biaego ....................................................................... 7
Wszystkie barwy tczy..............................................................................................7
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.
32
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
34
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
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
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<,
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
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
Jak przed chwil, wykrelany ksztat zadajemy wirtualn funkcj dwch zmiennych:
2"&"8&<"$"8&
"8&,<".
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
39
,
kolejno dostarcza wsprzdne wszystkich wieloktw, ktre zo si na
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
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
.,,
NO-
& 1
NO-
NO-
NO-
NO-
#
NO-
#
N#O-
J
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
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
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
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).
44
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
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).
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