- Applets : Fraktale : Apfelmännchen Zoom -
Das fraktale Apfelmännchen als Java-Applet mit Zoom-Funktion
Beim Zoom ins Apfelmännchen kommt besonders schön die sogenannte Selbstähnlichkeit, als eines der fraktalen Grundmerkmale zum Vorschein. Egal wo und wie tief man in den Randbereichen der Apfelmännchen sucht, (fast) überall finden sich immer wieder neue Apfelmännchen.
Ein linker Mausklick auf das Applet vergrößert das Apfelmännchen, ein rechter verkleinert es.
Die angeklickte Koordinate erscheint genau in der Mitte.
Reset mittels der F12-Taste.
Apfelmaennchen_Zoom.java
import java.awt.*;
import java.applet.*;
import java.util.*;
public class Apfelmaennchen_Zoom extends Applet {
double unit = 0.007; // Auflösung eines Pixels
double x_0 = -2.0; // linker Rand des Apfelmännchens
double y_0 = -1.3; // oberer Rand
int iterations = 50;
static long zoom = 1;
Image buffer;
Graphics gBuffer;
public void init() {
setBackground(new Color(255,255,255));
}
// Zoom-Funktion
public boolean mouseDown(Event ev, int xDown, int yDown) {
buffer = null;
if (yDown < 370) {
double unit_old = unit;
if (!ev.metaDown()) {
if (iterations == 3880760) return true; // Maximum
unit *= 0.5;
iterations = (int)(iterations*1.3);
zoom *= 2;
}
else if (ev.metaDown()){
if (zoom < 2) return true;
unit *= 2;
iterations = (int)(iterations/1.3+0.5);
zoom *= 0.5;
}
x_0 = x_0-(200-xDown)*unit + (unit_old - unit) * xDown;
y_0 = y_0-(185-yDown)*unit + (unit_old - unit) * yDown;
repaint();
}
return true;
}
public boolean keyDown(Event ev, int key) {
// Alles zurücksetzen
if (key==Event.F12) {
unit = 0.007;
x_0 = -2.0;
y_0 = -1.3;
iterations = 50;
zoom = 1;
buffer = null;
repaint();
}
return true;
}
// C-Werte checken nach Zn+1 = Zn^2 + C.
public int checkC(double reC,double imC) {
double reZ=0, imZ=0, reZ_minus1=0, imZ_minus1=0;
int i;
for (i=0; i<iterations; i++) {
imZ = 2*reZ_minus1*imZ_minus1+imC;
reZ = reZ_minus1*reZ_minus1-imZ_minus1*imZ_minus1+reC;
if (reZ*reZ+imZ*imZ > 4) return i;
reZ_minus1 = reZ;
imZ_minus1 = imZ;
}
return i;
}
// Apfelmännchen zeichnen
public void paint (Graphics g) {
if (buffer!=null) {
g.drawImage (buffer, 0, 0, this);
return;
}
buffer = createImage(this.getSize().width, this.getSize().height);
gBuffer = buffer.getGraphics();
double reC, imC;
int x,y;
imC = y_0; // oberer Rand
for (y=0;y<370;y++) {
reC = x_0; // linker Rand
for (x=0;x<400;x++) {
if(x==0 || x==399 || y==0 || y == 369)
gBuffer.setColor(new Color(100,100,100));
else if(checkC(reC,imC)==iterations)
gBuffer.setColor(new Color(0,0,180));
else gBuffer.setColor(new Color(0,200,250));
gBuffer.drawLine(x,y,x,y);
reC = reC+unit;
}
g.drawImage (buffer,0,0,this);
imC = imC+unit;
}
}
}
Download Apfelmaennchen_Zoom.zip (Mit Quellcode ca. 3 kb)
© 2001-2004 Albert Kluge - Alle Rechte vorbehalten
Impressum | Datenschutz | Nutzung | eMail
|