Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
31.05.2023
Размер:
3 Кб
Скачать
import java.awt.geom.Rectangle2D;
// Этот класс является подклассом FractalGenerator. Он используется для вычисления Фрактала Мандельброта.
public class Mandelbrot extends FractalGenerator{
    // Константа для количества максимальных итераций.
    public static final int MAX_ITERATIONS = 2000;
    /**Этот метод позволяет генератору фракталов указать, какая часть комплексной плоскости наиболее интересен для фрактала.
     * Ему передается объект прямоугольника, и метод изменяет поля прямоугольника, чтобы показать правильный
     * начальный диапазон для фрактала. Эта реализация устанавливает начальный диапазон в (-2 - 1.5i) - (1 + 1.5i)
     * или x = -2, y = -1.5, width = height = 3. */
    @Override
    public void getInitialRange(Rectangle2D.Double range){
        range.x = -2;
        range.y = -1.5;
        range.width = 3;
        range.height = 3;
    }
    //Этот метод реализует итерационную функцию для фрактала Мандельброта.
    @Override
    public int numIterations(double x, double y) {
        /** Вид: Zn = Zn-1 ^ 2 + c, Z(n) = x + yi
         Ограничения на модель Мандельброта: существует доказательство, что в модели Мандельброта |z|<=2 и |c|<=2.
         Вычислить Zn = Zn-1 ^ 2 + c, где значения представляют собой комплексные числа, представленные
         по zreal и zimaginary, Z0 = 0, а C - особая точка в фрактале, который мы отображаем (заданный x и y).
         Это повторяется до Z^2 > 4 (абсолютное значение Z больше 2) или максимум достигнуто количество итераций. */
        int countOperat = 0;
        double zreal = 0;
        double zimaginary = 0;

        while (countOperat < MAX_ITERATIONS && zreal * zreal + zimaginary * zimaginary < 4) {
            double zrealUpdated = zreal * zreal - zimaginary * zimaginary + x;
            double zimaginaryUpdated = 2 * zreal * zimaginary + y;
            zreal = zrealUpdated;
            zimaginary = zimaginaryUpdated;
            countOperat += 1;
        }
        if (countOperat == MAX_ITERATIONS) {
            return -1;
        }
        return countOperat;
        }
    @Override
    public String toString() {
        return "Mandelbrot";
    }
}
Соседние файлы в папке лабораторная 4-6