REFSKRIPT

; $VER: dust.men 1.0 (15.02.97)
;
; Author   : stephan.bielmann@rega-sense.ch
;
; Comments : Dust-fractal derived from the Monte-Carlo
;            method. Version for 2 turns.
;            Book one page 183.

GET_JA_NEIN Beschreibung zu Dust ?
GET_RESULT antwort
IF_STR_EQUAL_GOTO antwort NEIN start
    DISPLAY_TEXT_FILE dust.doc

>start:

;Parameter holen
GET_STRING Name des Dust objektes ?
RETURN_IF_ABBRUCH 1
GET_RESULT name

>getradiusx:
GET_REAL Fraktale Dimension in X-Richtung (0 - 1)?
RETURN_IF_ABBRUCH 1
GET_RESULT RadiusX
IF_GREATER_GOTO RadiusX 1 getradiusx

>getradiusy:
GET_REAL Fraktale Dimension in Y-Richtung (0 - 1)?
RETURN_IF_ABBRUCH 1
GET_RESULT RadiusY
IF_GREATER_GOTO RadiusY 1 getradiusy

GET_REAL Expansion in Z-Richtung (0 ..)?
RETURN_IF_ABBRUCH 1
GET_RESULT ExpZ

GET_INT Berechnungs Winkel ?
RETURN_IF_ABBRUCH 1
GET_RESULT Winkel

GET_INT Anzahl Staubpartikel ?
RETURN_IF_ABBRUCH 1
GET_RESULT Kmax

GET_REAL Radius der Kugeln ?
RETURN_IF_ABBRUCH 1
GET_RESULT KugelR

;Iterationskonstanten Berechnung
FUNCTION RadiusX*cos(Winkel)
GET_RESULT A

FUNCTION RadiusX*sin(Winkel)
GET_RESULT B

FUNCTION RadiusY*cos(Winkel)
GET_RESULT C

FUNCTION -RadiusY*sin(Winkel)
GET_RESULT D

;Wahrscheinlichkeitsschwelle
FUNCTION RadiusX*RadiusX/(RadiusX*RadiusX+RadiusY*RadiusY)
GET_RESULT Schwelle

;Anfangspunkt berechnen
FUNCTION A
GET_RESULT X

FUNCTION B
GET_RESULT Y

;Schleifenvariable initialisieren
SET_VAR K 0

;Erzeugen des Kugelobjektes
OBJ_NEW name 22
GET_RESULT objekt

>forschleife:
    RAND
    GET_RESULT Zufall

    FUNCTION X
    GET_RESULT Z
    IF_GREATER_GOTO Schwelle Zufall elsegroesser

    FUNCTION (A*X)-(B*Y)
    GET_RESULT X

    FUNCTION (B*Z)+(A*Y)
    GET_RESULT Y

    GOTO next
>elsegroesser:
    FUNCTION (C*X)-(D*Y)+1-C
    GET_RESULT X

    FUNCTION (D*Z)+(C*Y)-D
    GET_RESULT Y

>next:
    RAND
    GET_RESULT ZZ
    FUNCTION ZZ*ExpZ
    GET_RESULT ZZ

    PRINT Erzeuge Kugel # K : X Y ZZ

    GEO_NEW_PT objekt
    GET_RESULT punkt
    GEO_SET_PT objekt punkt X Y ZZ
    KUG_NEU_KUGEL objekt punkt KugelR
    GET_RESULT kgnr

    ADD K 1
    GET_RESULT K
    IF_NOT_EQUAL_GOTO Kmax K forschleife

MELDUNG Dust Fraktal name berechnet

RETURN 1
