Heim  >  Artikel  >  Java  >  Beispielcode für ein Mandelbrot-Fraktal

Beispielcode für ein Mandelbrot-Fraktal

零下一度
零下一度Original
2017-07-23 10:23:111260Durchsuche

Es gibt hauptsächlich die folgenden Arten von Fraktalen, mit denen der Autor bisher in Kontakt gekommen ist:

1. Fraktal ähnlich wie Clifford. Die Merkmale dieses Fraktals sind: Die Anfangskoordinaten des Fraktals sind (0,0). Nach einer großen Anzahl von Iterationen durch die Anfangskoordinaten wird eine Reihe von Punkten erhalten und die Fraktalkurve wird basierend auf den erhaltenen Punkten gezeichnet. Diese Art von Fraktal hat begrenzte Parameter und kann sehr einfach implementiert werden.

2. Fraktale wie IFS-Farn. Dieses Fraktal hat mehr Parameter als das vorherige Fraktal. Es ist erwähnenswert, dass es einen P-Wert in der Parameterliste des IFS-Farnfraktals gibt. Dieser Wert stellt die Wahrscheinlichkeit dar, dass jeder Satz verschiedener Parameter angezeigt wird Es ist unmöglich, die gewünschte Grafik zu erhalten.

3. Fraktal wie Mandelbrot. Dieses Fraktal erfordert die Kenntnis komplexer Zahlen und Zeitfluchtalgorithmen. Im Wesentlichen handelt es sich um eine Reihe von Punkten auf der komplexen Ebene. Der Time-Escape-Algorithmus wird verwendet, um zu bestimmen, ob sich der Punkt innerhalb der Menge befindet. Anschließend wird eine Reihe von Punkten erhalten und auf der Grundlage dieser Punkte werden Grafiken gezeichnet.

4. Fraktale wie L-System-Sticks. Diese Art von Fraktal muss die übergeordnete Zeichenfolge und die Entwicklungsregeln definieren und Grafiken durch die Punkte zeichnen, die von verschiedenen übergeordneten Zeichenfolgen und Entwicklungsregeln erreicht werden. Es ist nicht schwer, die Evolutionsregeln und übergeordneten Zeichenfolgen zu verstehen. Der Hauptgrund dafür ist, dass die Transformation zwischen Koordinaten schwierig zu berechnen ist.

Das Folgende ist ein Code über das Mandelbrot-Fraktal.

/**
 * 复数类
 * @author CBS */public class Complex {    public double r;public double i;    public Complex(double real,double image){this.r=real;this.i=image;
    }//取复数的模public double modulus(){return Math.sqrt(r*r+i*i);
    }//复数的加法public Complex add(Complex z){double addr=r+z.r;double addi=i+z.i;return new Complex(addr,addi);
    }//复数的乘法public Complex mul(Complex z){double mulr=r*z.r-i*z.i;double muli=i*z.r+r*z.i;return new Complex(mulr,muli);
    }
}
// 求最大的迭代次数的算法,时间逃逸算法public int mand(Complex z, int maxIte) {
        Complex curComp = new Complex(0, 0);for (int i = 0; i < maxIte; i++) {if (curComp.modulus() > 2)return i;
            curComp = curComp.mul(curComp).add(z);
        }return maxIte;
    }
// 画图的算法public void drawMand(Complex z, double scale, int MaxIte) {double pixUnit = 3 / (1080 * scale);double startx = z.r - 1080 * pixUnit / 2;double starty = z.i - 720 * pixUnit / 2;for (int i = 0; i < 1080; i++) {for (int j = 0; j < 720; j++) {double x0 = startx + i * pixUnit;double y0 = starty + j * pixUnit;
                Complex curComplex = new Complex(x0, y0);int time = mand(curComplex, MaxIte);if (time == MaxIte) {double x = x0 * 150 + 500;// 扩大出现方格double y = y0 * 150 + 500;
                    g.drawLine((int) x, (int) y, (int) x, (int) y);
                }
            }
        }
    }

Das obige ist der detaillierte Inhalt vonBeispielcode für ein Mandelbrot-Fraktal. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn