REFSKRIPT

; $VER: galaxy.men 1.1 (02.03.97)
;
; Author   : stephan.bielmann@rega-sense.ch
;
; Comments : Galaxy derived from the 2D algorithm from
;            Nikola Smolenski.

GET_JA_NEIN Beschreibung zu Galaxy ?
GET_RESULT antwort
IF_STR_EQUAL_GOTO antwort NEIN start
    DISPLAY_TEXT_FILE galaxy.doc

>start:

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

>anzahlarme:
GET_INT Anzahl Arme ?
RETURN_IF_ABBRUCH 1
GET_RESULT Narme
IF_LESS_GOTO Narme 1 anzahlarme

GET_INT Anfangsdurchmesser der Galaxy?
RETURN_IF_ABBRUCH 1
GET_RESULT StartDiam

GET_INT Ausbreitungswinkel der Arme ?
RETURN_IF_ABBRUCH 1
GET_RESULT Winkel

GET_INT Ausbreitungsschritt der Arme ?
RETURN_IF_ABBRUCH 1
GET_RESULT Step

GET_INT Sternendichte ?
RETURN_IF_ABBRUCH 1
GET_RESULT Dichte

>minimradius:
GET_REAL Minimaler Sternenradius (> 1.5)?
RETURN_IF_ABBRUCH 1
GET_RESULT MinRadius
IF_LESS_GOTO MinRadius 1.5 minimradius

GET_REAL Delta vom minimalen zum maximalen Sternenradius ?
RETURN_IF_ABBRUCH 1
GET_RESULT MaxRadius

>sub_praez:
GET_INT Berechnungspraezision ?
RETURN_IF_ABBRUCH 1
GET_RESULT Praezision
IF_LESS_GOTO Praezision 1 sub_praez

;Konstanten Berechnen

;Rotationswinkel der einzelnen Arme
DIV 360 Narme
GET_RESULT Rotation

;Erzeugen des ersten Armes
ADD_STR name Arm1
GET_RESULT namearm
OBJ_NEW namearm 22
GET_RESULT objekt1

;Kugelzähler initialisieren
SET_VAR k 0

;Materialien erstellen

FUNCTION 0
GET_RESULT i

>forschleife4:
    IF_EQUAL_GOTO i 11 endfor4

    IDIV i 1
    GET_RESULT j

    ADD_STR SternGlow j
    GET_RESULT stername

    OBJ_NEW stername 7
    GET_RESULT glow

    SURF_SET_PARAM glow 1 0
    SURF_SET_PARAM glow 0 0.5
    SURF_SET_PARAM glow 3 0.5

    MUL i 30
    GET_RESULT colr
    MUL i 30
    GET_RESULT colg

    MAT_SET_COLOR glow colr colg 0

    ADD i 1
    GET_RESULT i

    GOTO forschleife4
>endfor4:

;Schleifenvariable initialisieren
SET_VAR i 1

>forschleife:
    IF_GREATER_GOTO i Winkel endfor

    ADD StartDiam Step
    GET_RESULT StartDiam

    RAND
    GET_RESULT Zufall
    FUNCTION Zufall*20+Dichte-10
    GET_RESULT Radius

    FUNCTION cos(i)*StartDiam
    GET_RESULT X

    FUNCTION sin(i)*StartDiam
    GET_RESULT Y

    SET_VAR Z 0

    SET_VAR j 1

>forschleife2:
        IF_GREATER_GOTO j Radius endfor2

        PRINT Fortschritt i von Winkel

        RAND
        GET_RESULT Zufall
        FUNCTION Zufall*MaxRadius+MinRadius
        GET_RESULT SternRadius

        GEO_NEW_PT objekt1
        GET_RESULT punkt
        GEO_SET_PT objekt1 punkt X Y Z
        KUG_NEU_KUGEL objekt1 punkt SternRadius
        GET_RESULT kgnr

        RAND
        GET_RESULT Zufall

        MUL Zufall 10
        GET_RESULT glow

        IDIV glow 1
        GET_RESULT glow

        ADD_STR SternGlow glow
        GET_RESULT glow

        KUG_SET_KUGEL_MATERIAL objekt1 kgnr glow

        RAND
        GET_RESULT Zufall
        FUNCTION X+(Zufall*20)-10
        GET_RESULT X

        RAND
        GET_RESULT Zufall
        FUNCTION Y+(Zufall*20)-10
        GET_RESULT Y

        RAND
        GET_RESULT Zufall
        FUNCTION Z+(Zufall*6)-3
        GET_RESULT Z

        ADD j 1
        GET_RESULT j
        GOTO forschleife2
>endfor2:

    ADD i Praezision
    GET_RESULT i
    GOTO forschleife
>endfor:

;Erstellen der Galaxy

OBJ_NEW name 22
GET_RESULT galaxyobj

;Schleifenvariabeln initialisieren
FUNCTION 1
GET_RESULT i

>forschleife3:
    IF_EQUAL_GOTO i Narme endfor3
    ADD i 1
    GET_RESULT i

    OBJ_NEW namearm 22
    GET_RESULT objekti
    OBJ_COPY objekt1 objekti

    FUNCTION (i-1)*Rotation
    GET_RESULT RotWinkel
    GEO_ROT objekti 2 RotWinkel

    GEO_INSERT_SON galaxyobj objekti

    PKL_ADD objekti

    GOTO forschleife3
>endfor3:

;Anzeigen der Galaxie
PKL_ADD galaxyobj
PKL_ADD objekt1

;Berechnen der Endwerte
KUG_NKUGELN objekt1
GET_RESULT k

MUL k Narme
GET_RESULT k

PRINT Galaxie mit # Narme Armen, # k Kugeln.

MELDUNG Galaxie name berechnet

RETURN 1
