Anmelden

Benutzername:   Passwort:   
 
  Automatische Anmeldung (Cookie)
  Benutzerdaten ändern


Registrieren    Passwort vergessen    Daten löschen    Abbrechen

 

Apfelmännchen


...nur für registrierte Benutzer
Suchen und finden...

Hier nehmen Sie Kontakt mit uns auf...
Wer wir sind...
Ein Apfelmännchen für R/3. Grafisch nicht umwerfend, aber das Prinzip funktioniert. Allzu lange Laufzeiten entstehen auch nicht, da die Bildgröße sehr beschränkt ist.

Auf dem Startbildschirm müssen Sie die mathematischen Eingrenzungen vornehmen:


Start

Starten Sie das Programm und Sie erhalten eine ähnliche Grafik wie hier:


Apfelmännchen

Parameter

Folgende Parameter bringen auf jeden Fall brauchbare Ergebnisse:

A-Min                       1,4000000-
A-Max                       1,0000000 
B-Min                       2,0000000-
Iterationen                 5

A-Min                       0,1200000-
A-Max                       0,7200000 
B-Min                       0,5000000-
Anzahl Iterationen          15               

A-Min                       0,1200000-  
A-Max                       0,7200000   
B-Min                       0,0030000-  
Anzahl Iterationen          10                 

A-Min                       0,5000000-
A-Max                       0,9000000 
B-Min                       0,7000000-
Anzahl Iterationen          16               

Das Coding

REPORT zz_fraktal NO STANDARD PAGE HEADING LINE-SIZE 500 LINE-COUNT 500.
**********************************************************************
***                                                                ***
***                  
http://www.tricktresor.de                    ***
***                                                                ***
**********************************************************************
*--------------------------------------------------------------------*
* Autor: Enno Wulff
* Datum: Oktober 2004
*--------------------------------------------------------------------*
*
* Das Programm erzeugt eine Apfelmännchen-Grafik
*
* Die Anzahl der Iterationen sollte nicht größer sein als 100, denn
* je mehr Iterationen ausgeführt werden, desto länger dauert die
* Berechnung. Aufgrund der schlechten grafischen Verhältnisse werden
* jedoch keine besseren Ergebnisse mehr erzielt.
* Zwischen 5 und 50 Iterationen werden sehr unterschiedliche
* Ergebnisse erzielt.
* Mein Dank gilt Dietmar Grätzer dessen "praktische Einführung" zum
* Thema "Fraktale und Chaos" mir geholfen hat, die Programmierung in
* ABAP zu realisieren.
*
* Das Dokument sowie viele andere Informationen können unter
*
*  
http://www.fraktale-online.de
*
* abgerufen werden.
*
*--------------------------------------------------------------------*

DATA:
  aschritt TYPE f,
  bschritt TYPE f,
  sx       TYPE i,
  zy       TYPE i,
  a        TYPE f,
  b        TYPE f,
  x        TYPE f,
  y        TYPE f,
  n        TYPE f,
  n0       TYPE f,
  n1       TYPE i,
  n2       TYPE f,
  xx       TYPE f,
  z1       TYPE f,
  bmax     TYPE i.

PARAMETERS:
  p_scrbr(3) TYPE n,
  px(3)      TYPE n DEFAULT 200,
  py(3)      TYPE n DEFAULT 70,
  p_modcol   RADIOBUTTON GROUP mod DEFAULT 'X',
  p_modchr   RADIOBUTTON GROUP mod,
  amin(8)    TYPE p DECIMALS 7 DEFAULT '2-',
  amax(8)    TYPE p DECIMALS 7 DEFAULT '1',
  bmin(8)    TYPE p DECIMALS 7 DEFAULT '1-',
  nmax(4)    TYPE n DEFAULT 20. "Anzahl Iterationen


AT SELECTION-SCREEN OUTPUT.

*-- Aktuelle sichtbare Breite des Bildschirms
  p_scrbr = sy-scols - 2.

*-- Feld "Sichtbare Breite" auf "nur anzeigen" stellen
  LOOP AT SCREEN.
    IF screen-name = 'P_SCRBR'.
      screen-input = '0'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.


START-OF-SELECTION.

*-- Init
  SET BLANK LINES ON.
  WRITE AT /(px) space NO-GAP.

  bmax = 2 / 3 * ( amax - amin ) + bmin.

  aschritt = ( amax - amin ) / px.       "Schrittweite
  bschritt = ( bmax - bmin ) / py.

*-- Berechnung der Mandelbrot-Menge
  DO px TIMES.
    sx = sy-index. "BildschirmSpalten
    a = amin + sx * aschritt.
    DO py TIMES.                "BildschirmZeilen
      zy = sy-index.
      b = bmax - zy * bschritt.
      x = 0.
      y = 0.                  "Startwert z0=0
      DO nmax TIMES.                                        "Iteration
        n = sy-index.
        xx = x * x - y * y + a.        "Hilfsgroesse
        y = 2 * x * y + b.             "Imaginaerteil
        x = xx.                                             "Realteil
        z1 = x * x + y * y.
        IF z1 > 4.
          n0 = n.
* Der Punkt c = (a, b) gehoert nicht zur Mandelbrot-Menge
          EXIT.
        ENDIF.
      ENDDO. "n
* Punktausgabe
      n1 = n0 / 2.
      n2 = n0 / 2.
      IF n1 = n2.
        PERFORM pset USING sx zy 1.
        "Darstellung der Niveaulinien
        z1 = x * x + y * y.
        IF z1 <= 4.
          PERFORM pset USING sx zy y.
          "Der Punkt c = (a, b) gehoert zur Mandelbrot-Menge
        ENDIF.
      ELSE.
        z1 = x * x + y * y.
        IF z1 <= 4.
          PERFORM pset USING sx zy y.
          "Der Punkt c = (a, b) gehoert zur Mandelbrot-Menge
        ENDIF.
      ENDIF.
    ENDDO. " zy
  ENDDO." sx


*---------------------------------------------------------------------*
*       FORM punkt_setzen                                             *
*---------------------------------------------------------------------*

FORM pset USING fx fy farbe TYPE f.

  DATA:
    l_char  TYPE c,
    l_farbe TYPE i,
    l_abcde(26),
    l_intens(1) TYPE n.


  SKIP TO LINE fy.
  POSITION fx.

  IF p_modchr = 'X'.
*** Setzen des Punktes als Zeichen ***
    l_farbe = abs( farbe ) * 10.
    l_abcde = sy-abcde.
    SHIFT l_abcde BY l_farbe PLACES LEFT CIRCULAR.
    l_char = l_abcde+0(1).
    WRITE l_char NO-GAP.

  ELSE.
*** Setzen eines farbigen "Punktes"
    IF farbe < 0.
      l_intens = 0.
    ELSE.
      l_intens = 1.
    ENDIF.

    l_farbe = abs( farbe ) * 15.
    IF l_farbe = 0.
      l_farbe = 6.
    ENDIF.
    WRITE '  ' COLOR = l_farbe INTENSIFIED = l_intens.

  ENDIF.

ENDFORM.

 




  Drucken   Artikel empfehlen  Artikel bewerten: uninteressanteher uninteressantweniger interessantneutraleher interessantinteressantsehr interessant