как увеличить набор Мандельброта - PullRequest
3 голосов
/ 10 декабря 2010

Я успешно реализовал набор Мандельброта, как описано в статье в Википедии, но я не знаю, как увеличить конкретный раздел.Это код, который я использую:

+(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);
    }
}

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

Ответы [ 2 ]

2 голосов
/ 10 декабря 2010

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

x0 = cx + (i / ширина - 0,5) * lx;

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

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

2 голосов
/ 10 декабря 2010

Во-первых, с 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

...