Własności przekształcenia a zbiory Julii i Mandelbrota.
Przekształcenie posiada bardzo ciekawe własności geometryczne. Aby się o tym przekonać
należy wykreślić obrazy różnych figur w tym przekształceniu. Poniższy program
komputerowy przekształca figurę w kształcie "Mateusza z Zamościa" (Ten i
pozostałe programy oraz inne komponenty potrzebne do
tego artykułu znajdują się w pliku skl-J-M.zip).
Program Przeksztalcenia_geometryczne; {Turbo Pascal}
uses crt, graph, czyt_pcx;
var karta,tryb:integer;
n,jx,jy,xsr,ysr,dl,wys,kolor,x1E,y1E:longInt;
x,y,x1,y1,xL,yD,xP,yG,Dx,Dy,a,b:real;
begin
karta:=detect; initGraph(karta,tryb,'');
xL:=0; xP:=0.6; yD:=0; yG:=1; dl:=85; wys:=110;
jx:=round(dl/(xP-xL)); jy:=round(wys/(yG-yD));
xsr:=320; ysr:=240;
bar(0,0,640,480); setColor(lightGray);
for n:=-10 to 10 do line(xsr+round(n*jx),0,xsr+round(n*jx),480);
for n:=-10 to 10 do line(0,ysr-round(n*jy),640,ysr-round(n*jy));
setColor(black); line(xsr,0,xsr,480); line(0,ysr,640,ysr);
wczytaj_rys_PCX('Mateusz.pcx',xsr+round(xL*jx),ysr-round(yG*jy));
rectangle(xsr+round(xL*jx),ysr-round(yD*jy),xsr+round(xP*jx),ysr-round(yG*jy));
a:=-0.3; b:=0.1;
repeat
x:=xL+random*(xP-xL);
y:=yD+random*(yG-yD);
kolor:=getPixel(xsr+round(x*jx),ysr-round(y*jy));
x1:=x*x-y*y+a; y1:=2*x*y+b;
x1E:=xsr+round(x1*jx); y1E:=ysr-round(y1*jy);
if getPixel(x1E,y1E)=white then putPixel(x1E,y1E,kolor);
until keyPressed;
closeGraph;
end.
![]() |
![]() |
![]() |
![]() |
Rys.1 | Rys.2 | Rys.3 | Rys.4 |
Rysunki 1-4 otrzymane dla różnych wartości xL,yD,xP,yG sugerują nazwę tego przekształcenia - "wachlarz". Niezależnie od tego, w której ćwiartce układu współrzędnych jest umieszczony prostokąt z Mateuszem, to zawsze punkty prostokąta rozwijają się "w wachlarz" dookoła punktu (0,0). Dwa boki prostokąta, te które przed przekształceniem leżą na osiach układu współrzędnych, po przekształceniu tworzą linię prostą, zaś dwa pozostałe boki tworzą łuki wachlarza. Współczynniki a i b to oczywiście współrzędne wektora translacji i zostały tak dobrane, aby obraz jak najmniej przysłaniał wyjściowy prostokąt z Mateuszem.
"Wachlarz" otrzymany w tym przekształceniu prowokuje następne pytania: Co będzie gdy dwa razy wykonamy to samo przekształcenie? Czy wachlarz powiększy się? Czy obrazy niektórych punktów pozostaną w pobliżu punktu (0,0)? Odpowiedź możemy uzyskać modyfikując nieznacznie program komputerowy. Poniższy rys. 5 przedstawia podwójne złożenie naszego przekształcenia.
Rys.5. Dwukrotne złożenie
przekształcenia
Rzeczywiście, wachlarz powiększył się. Są jednak punkty, których obrazy nie oddaliły się zbyt daleko od punktu (0,0). Zachęcam do sprawdzenia, czy dla złożenia większej liczby przekształceń zasada ta będzie zachowana i jaki wpływ na oddalanie się punktów mają współczynniki a i b.
Gdy wiemy już, że w złożeniu przekształceń obrazy wielu punktów uciekają do nieskończoności zaś obrazy niektórych
punktów pozostają w otoczeniu punktu (0,0), to warto wiedzieć o każdym punkcie czy
jest "uciekinierem" czy "więźniem". Poniższy program wykonuje
14-krotne składanie i zaznacza odpowiednim kolorem "uciekinierów" i "więźniów". Pierwszym matematykiem,
który badał zbiory "uciekinierów" i "więźniów" był Gaston Julia
(zm. 1978 r.). Na jego cześć brzegi zbiorów "więźniów" nazywamy zbiorami Julii, choć jego
badania dotyczyły przybliżeń miejsc zerowych układów równań obliczanych metodą Newtona.
Program Przeksztalcenia_geometryczne_Zbior_Julii;
uses crt, graph;
var karta,tryb:integer;
n,jx,jy,xsr,ysr,dl,wys,ii:longInt;
x,y,x1,y1,xL,yD,xP,yG,Dx,Dy,x0,y0,a,b:real;
begin
karta:=detect; initGraph(karta,tryb,'');
xL:=-3; xP:=3; yD:=-2; yG:=2; ii:=14; dl:=320; wys:=240;
jx:=round(dl/(xP-xL)); jy:=round(wys/(yG-yD));
xsr:=320; ysr:=240;
bar(0,0,640,480); setColor(lightGray);
for n:=-10 to 10 do line(xsr+round(n*jx),0,xsr+round(n*jx),480);
for n:=-10 to 10 do line(0,ysr-round(n*jy),640,ysr-round(n*jy));
setColor(black); line(xsr,0,xsr,480); line(0,ysr,640,ysr);
rectangle(xsr+round(xL*jx),ysr-round(yD*jy),xsr+round(xP*jx),ysr-round(yG*jy));
a:=-0.3; b:=0.1;
repeat
x0:=xL+random*(xP-xL);
y0:=yD+random*(yG-yD);
x:=x0; y:=y0; n:=0;
repeat
x1:=x*x-y*y+a;
y1:=2*x*y+b;
x:=x1;
y:=y1;
n:=n+1;
until (n>ii)or(x*x+y*y>9);
putPixel(xsr+round(x0*jx),ysr-round(y0*jy),n);
until keyPressed;
closeGraph;
end.
Rys. 6. Zbiór Julii dla a=-0.3, b=0.1. |
Rys. 7. Zbiór Julii dla a=-0.1, b=0.9. |
Rys. 8. Zbiór Julii dla a=0.4, b=0.3. |
Rys. 9. Zbiór Julii dla a=-0.8, b=0. |
Zmieniając współczynniki a i b w programie można uzyskiwać bardzo wiele różnych zbiorów Julii. W roku 1979 Benoit Mandelbrot postawił sobie pytanie: Dla jakich a i b uzyskujemy spójne (w jednym kawałku) zbiory Julii? Przeprowadził odpowiedni eksperyment i otrzymał swój słynny zbiór, zwany obecnie zbiorem Mandelbrota - rys.10. Zbiór Mandelbrota jest zbiorem tych wartości a i b dla których trajektoria zera nie ucieka do nieskończoności.
Rys. 10. Zbiór Mandelbrota w obszarze -3<x<3; -2<y<2.
Aby dokładnie zrozumieć związek pomiędzy zbiorami Julii a zbiorem Mandelbrota należy uruchomić program "Jul-Mand.exe". Program ten pokazuje, że zbiór Mandelbrota jest "mapą" zbiorów Julii. Zbiór Mandelbrota jest fraktalem i uważany jest za najbardziej skomplikowaną figurę geometryczną jaką wymyślił człowiek.
Poniższe rysunki, będące powiększeniami odpowiednich fragmentów zbioru Mandelbrota, otrzymano przy pomocy programu, który jest prostą modyfikacją programu do otrzymywania zbiorów Julii.
Rys.11. -1.5<x<0; -1<y<0 |
Rys.12. -1.5<x<-0.75; -0.5<y<0 |
Rys.13. -1.1<x<-0.95;
-0.32<y<-0.21 |
Rys.14. -0.09<x<-0.03; 0.65<y<0.68 |
Rys.15. -0.0687<x<-0.0677; 0.6629< y<0.6635 |
Rys.16. -0.068163<x<-0.068143; 0.66306y<0.663075 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Punkty Misiurewicza w zbiorze Mandelbrota |
![]() |
Zobacz również:
|
Eugeniusz Jakubas
Zamość, 1998r.
Na stronie "Podróże po zbiorze Mandelbrota" znajdziesz program do oglądania dowolnych fragmentów zbioru Mandelbrota.