Манделобус                                  
22.11.94                                                                      
                                      
    Я приглашаю читателей последовать 
 за мной на манделобусе в путешествие 
 по воображаемой равнине и совершить  
 экскурсию в множество Мандельброта.  
    Подобно точкам земной поверхности,
 положение которых можно определить по
 широте и долготе, точки на плоскости 
 также имеют координаты. Точка (0,0)  
 называется началом координат, лежит в
 центре плоскости. По мановению       
 волшебной палочки читатель           
 превращается невероятно крошечное    
 существо, помещающееся в точке с     
 координатами (a,b). Теперь читатель  
 готов к тому, чтобы начать           
путешествие на маделобусе, но прежде чем подойдет манделобус, поясним его     
маршрут. Начав с точки (0,0), он проследует прямо к точке (а,b), где ожидает  
его читатель. Маршрут манделобуса можно описать сравнительно несложной        
формулой, пользуясь которой можно определить, в какой следующей пункт следует 
ехать после остановки в точке (x,y), а именно: (x^2 - y^2 + a, 2'x'y + b)     
   Дорога, по которой следует манделобус, очень извилиста. Все маршруты его   
движения не похожи друг на друга, и каждый из них полностью определяется      
точкой (a,b) и формулой движения.                                             
   Хотя поездка может продолжаться сколько угодно долго, пока есть желание    
повторять циклы вычислений, маршрут, по которому движется манделобус, будет   
либо ограниченным, либо неограниченным. Под этими словами понимается, что     
последовательность остановок будет всегда заключена внутри какой-то           
ограниченной зоны вокруг начала координат, либо выйдет за пределы этой зоны и 
устремится в бесконечность.                                                   
   Что же такое множество Мандельброта ? Это просто множество точек (a,b), в  
которых манделобус делает остановки на своем маршруте в ограниченной зоне.    
Множество образует непрерывный континуум в средней части плоскости, вблизи    
начала координат, с тонкими извивающимися ветвями на периферии.               
   В компьютерных программах, генерирующих изображения множеств Мандельброта, 
цвет пиксел на экране зависит от того, устремится ли манделобус в             
бесконечность из точки (a,b), представляемой данным пикселом, и если да, то   
насколько быстро.                                                             
   Существует доказанная теорема (и следовательно, это безусловно верно), что 
если манделобус когда-либо достигнет точки, отстоящей от начала координат на  
две и более единиц, то он в конце концов уйдет в бесконечность.               
                                                                              
А.К. Дьюдни. Увлекательное путешествие по множеству Мандельброта. В Мире науки
No.4 1989                                                                     
                                                                              
узор на рисунке построен при помощи программы, аналогичной этой:              
                                                                              
#include <graphics.h>                                                         
#include <bios.h>                                                             
                                                                              
main() {                                                                      
        double StartX = -1.5, EndX = -1.20, StartY = -0.15, EndY = 0.15;      
        double StepX, StepY;                                                  
        double x,y, x0, y0;                                                   
        int i,j, c, dr = EGA, md = EGAHI;                                     
                                                                              
        StepX = (EndX - StartX) / 640;                                        
        StepY = (EndY - StartY) / 350;                                        
        initgraph(&dr, &md, "");                                              
        for(j = 0; j < 350; j++) for(i = 0; i < 640; i++) {                   
                x = 0;                                                        
                y = 0;                                                        
                c = 0;                                                        
                while (x*x + y*y < 2.0 && c < 300) {                          
                        x0 = x*x - y*y + StartX + StepX * i;                  
                        y0 = 2*x*y + StartY + StepY * j;                      
                        c++;                                                  
                        x = x0;                                               
                        y = y0;                                               
                }                                                             
                c /= 10;                                                      
                c++;                                                          
                if (c > 15) c = 0;                                            
                putpixel(i,j,c);                                              
        }                                                                     
        bioskey(0);                                                           
        return 0;                                                             
}                                                                             
                                                                              


HyperText/CGI-HTML, v. 3.6.4 (C)1994-2000 M.Zakharov