Ein kleines Programm zum Zeichnen des Apfelmännchens in Java
Von: Delastelle
Datum: So. 03. Dezember 2017 21:19:56
Thema: Software


Leider wurden das DOS-Programm Fractint und das Windows-Programm Winfract nicht mehr weiterentwickelt. Um trotzdem Fraktale zu erzeugen, habe ich hier ein Java-Programm zur Erzeugung des Apfelmännchens. Im Anschluss noch einige Fraktale, die mit Fractint erzeugt wurden.

Teil 1



Falls man kein Fractint oder Winfract(läuft nur unter älteren Windows-Versionen wie Windows XP) zur Verfügung hat hier ein Java-Programm für das Apfelmännchen.

Der Aufruf des Java-Programms erfolgt so:
javac mandPanel.java
javac mandFrame.java
javac mand.java
java mand
Java
import javax.swing.JFrame;
public class mand
{  public static void main(String[] args)
   {
   int[][] feld = new int[1500][1000];
   int l ,n1, n2, grenze;
   double a,b,s,u,v,x,xl,x2,y,y2,dx,dy;
   double xmin,xmax,ymin,ymax,p,q;
   int k;
 
   // xmin = -1.5; xmax = 1; ymin = -1.25; ymax = 1.25;
   // xmin=1; xmax=-2.8; ymin=1.5; ymax=-1.5; // Voelz Nr.1 -> alle Vorzeichen gewechselt
   // xmin=-0.7; xmax=-1.0; ymin=0.3; ymax=0.1; // Voelz Nr.2 -> alle Vorzeichen gewechselt
   // xmin =  -0.74; xmax=-0.79; ymin=0.135; ymax=0.025; // Voelz Nr.3 -> alle Vorzeichen gewechselt
   // xmin =  -0.74; xmax=-0.77; ymin=0.12; ymax=0.097; // Voelz Nr.4 -> alle Vorzeichen gewechselt
   // xmin =  -0.741; xmax=-0.749; ymin=0.116; ymax=0.11; // Voelz Nr.5 -> alle Vorzeichen gewechselt
   // xmin =  -0.745; xmax=-0.748; ymin=0.1163; ymax=0.114; // Voelz Nr.6 -> alle Vorzeichen gewechselt
   // xmin =  -0.7445; xmax=-0.7459; ymin=0.1132; ymax=0.11215; // Voelz Nr.7 -> alle Vorzeichen gewechselt
   // xmin =  -0.74515; xmax=-0.7455; ymin=0.1131; ymax=0.1129; // Voelz Nr.8 -> alle Vorzeichen gewechselt
   // xmin =  -0.74573; xmax=-0.74545; ymin=0.113018; ymax=0.11298; // Voelz Nr.9 -> alle Vorzeichen gewechselt
   xmin =  -0.74542; xmax=-0.745445; ymin=0.113016; ymax=0.112999; // Voelz Nr.10 -> alle Vorzeichen gewechselt
 
   n1 = 1500; // 640, 1500
   n2 = 1000; // 480, 1000
   grenze = 1000;  
 
   System.out.println("xmin = " + xmin);
   System.out.println("xmax = " + xmax);
   System.out.println("ymin = " + ymin);
   System.out.println("ymax = " + ymax);
 
   System.out.println("n1 = " + n1);
   System.out.println("n2 = " + n2);
   dx = (xmax-xmin)/n1;
   dy = (ymax-ymin)/n2;
 
  for(int i = 0; i < n1; i++)
  {
    for(int j = 0; j < n2; j++)
    {  p = xmin+i*dx;
       q = ymin+j*dy;
      a = p;
      b = q;
      x = a;
      y = b;
      k = 0;
      s = 1;
      while ((s<1000) && (k<grenze))
      {  xl = x; k = k+1;
        x2 = x * x;
        y2 = y * y;
        x = x2 - y2 + a;
        y = 2 * xl * y + b;
        s = x2 + y2;
      }
      feld[i][j]=0;
      if (k<grenze)
      { l = 1+(int) Math.floor(Math.log(k)/Math.log(2.0)*12.0) % 12;
        feld[i][j] = l;
 
      }
    }
  }
  mandFrame frame = new mandFrame(feld,n1,n2);
  frame.setTitle("Apfelmännchen");
  frame.setVisible(true);
}
 
}
 
Java
import java.awt.Container;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
 
/*************************************************************
*  Dieses Klasse sorgt für das Neuzeichnen des Windows-Kastens
*************************************************************/
public class mandFrame extends JFrame
{  private mandPanel panel;
   public mandFrame(int[][] feld, int n1, int n2)
   {  final int DEFAULT_FRAME_WIDTH = n1;
      final int DEFAULT_FRAME_HEIGHT = n2;
      setSize(DEFAULT_FRAME_WIDTH, DEFAULT_FRAME_HEIGHT);
 
      addWindowListener(new WindowCloser());
 
      panel = new mandPanel
         (feld, n1, n2);
      Container contentPane = getContentPane();
      contentPane.add(panel, "Center");
   }
 
   private class WindowCloser extends WindowAdapter
   {  public void windowClosing(WindowEvent event)
      {  System.exit(0);
      }
   }
}
 
 
Java
import java.awt.Graphics;
import javax.swing.JPanel;
import java.awt.Color;
 
/***********************************************************
*  Diese Klasse sorgt für das Neuzeichnen vom Inneren
*  des Windows-Kastens  
***********************************************************/
public class mandPanel extends JPanel
{  private static int[][] feld;
   private static int n1;
   private static int n2;
   int x,y;
   private mandPanel panel;
   /* Konstruktor */
   public mandPanel(int[][] feld2 , int n1, int n2)
   {  feld = feld2;
      x = n1;
      y = n2;
   }
 
   /* Rahmenprogramm */
   public void paint(Graphics g)
   {  super.paint(g);
      for (int i = 0; i < x; i++)
      {  for (int j = 0; j < y; j++)
         { if (feld[i][j]==0) g.setColor(Color.BLACK);
           if (feld[i][j]==1) g.setColor(Color.BLUE);
           if (feld[i][j]==2) g.setColor(Color.CYAN);
           if (feld[i][j]==3) g.setColor(Color.DARK_GRAY);
           if (feld[i][j]==4) g.setColor(Color.GRAY);
           if (feld[i][j]==5) g.setColor(Color.GREEN);
           if (feld[i][j]==6) g.setColor(Color.LIGHT_GRAY);
           if (feld[i][j]==7) g.setColor(Color.MAGENTA);
           if (feld[i][j]==8) g.setColor(Color.PINK);
           if (feld[i][j]==9) g.setColor(Color.RED);
           if (feld[i][j]==10) g.setColor(Color.ORANGE);
           if (feld[i][j]==11) g.setColor(Color.YELLOW);
           g.drawLine(i, j, i, j);
         }
      }
   }
 
}

Teil 2


Hier noch 10 Fraktale erzeugt mit dem Uraltprogramm Fractint.










Die Bilder 2 bis 11 wurden mit Fractint unter DOS-Box erzeugt.
Es sind Ausschnitte des klassischen Apfelmännchens.
Ein Beispiel zur Erzeugung:
Datei voelz1.bat
DOS
cycles = 50000
fractint float=yes sound=off video=sf7 batch=yes maxiter=32767 map=goodega corners=1/-2.8/1.5/-1.5 savename=voelz1.gif

Aufruf:
(Dosbox)
mount d d:\Fractint
d:
voelz1

Falls der Fractint-Ordner d:\Fractint ist und die DOS-Batch-Datei voelz1.bat heißt.
Zu den Koordinaten der Bilder 2 bis 11 siehe auch mand.java ganz oben.
Die Koordinaten der Bilder gehen auf Vorschläge des Wissenschaftlers Prof.Horst Völz zurück, der 1988 die Fraktale in Basic erzeugte.
Die Rechenzeiten betrugen damals viele Stunden pro Bild - heute sind es wenige Minuten pro Bild.

Literatur:
Klaus Lerbinger/Michael Kuchenbuch: Faszination Fraktale, Systhema Verlag, München 1992

Viele Grüße
Ronald


Dieser Artikel kommt von Matroids Matheplanet
http://matheplanet.com

Die Url für diesen Artikel ist:
http://matheplanet.com/default3.html?article=1812