2010-12-10 4 views
1

Я успешно реализовал набор mandelbrot, как описано в статье wikipedia, но я не знаю, как увеличить масштаб в определенном разделе. Это код, я использую:Как увеличить размер mandelbrot

+(void)createSetWithWidth:(int)width Height:(int)height Thing:(void(^)(int, int, int, int))thing 
{ 
    for (int i = 0; i < height; ++i) 
    for (int j = 0; j < width; ++j) 
    { 
     double x0 = ((4.0f * (i - (height/2)))/(height)) - 0.0f; 
     double y0 = ((4.0f * (j - (width/2)))/(width)) + 0.0f; 
     double x = 0.0f; 
     double y = 0.0f; 

     int iteration = 0; 
     int max_iteration = 15; 

     while ((((x * x) + (y * y)) <= 4.0f) && (iteration < max_iteration)) 
     { 
      double xtemp = ((x * x) - (y * y)) + x0; 
      y = ((2.0f * x) * y) + y0; 
      x = xtemp; 
      iteration += 1; 
     } 

     thing(j, i, iteration, max_iteration); 
    } 
} 

Это было мое понимание того, что х0 должно быть в диапазоне -2,5 - 1 и у0 должно быть в пределах -1 - 1, и что уменьшение этого числа будет увеличить, но это действительно не работало вообще. Как я могу увеличить масштаб?

+0

также, все множество содержится в пределах -2 2010-12-10 04:06:39

+0

Для «бесконечных масштабирования» я считаю, что используется некоторое свойство самого фрактального алгоритма. – 2010-12-10 04:21:02

ответ

2

Прежде всего, с max_iteration 15, вы не увидите много деталей. у меня есть 1000 итераций за точку в качестве базовой линии и может идти до 8000 итераций, прежде чем она действительно станет слишком медленной, чтобы ждать.

это может помочь: http://jc.unternet.net/src/java/com/jcomeau/Mandelbrot.java

это тоже: http://www.wikihow.com/Plot-the-Mandelbrot-Set-By-Hand

2

Пусть центр является (см, су) и длиной вы хотите отобразить это (лк, LY), вы можете использовать следующий формула масштабирования:

x0 = cx + (i/width - 0.5) * lx;

y0 = cy + (j/width - 0.5) * ly;

Что она делает это в первую очередь уменьшаем пиксель на единичный интервал (0 < = я/ширина < 1), а затем перенести центр (-0,5 < = я/ширина-0,5 < 0,5), масштабирование до нужный размер (-0,5 * lx < = (i/ширина-0,5) * lx < 0,5 * lx). Наконец, переместите его в центр, который вы дали.

Смежные вопросы