CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCC THE MANDELBROT SET CALCULATION SUBROUTINE CALC2 C INTEGER MAXI,WIDTH,CR,LF COMMON /PARAM2/MAXI,WIDTH,CR,LF REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP REAL CMPVAL REAL ZR,ZI,ZRN REAL X,Y REAL PX,PY DIMENSION PX(1),PY(1) INTEGER COUNT C CALL SCALE(LOWX,LOWY,HIGHX,HIGHY) C CCCCCC ENTER THE CALCULATION 299 CMPVAL=MAXVAL*MAXVAL X=LOWX Y=HIGHY C CCCCCC EINSTIEG IN DEN AKTUELLEN PUNKT 300 COUNT=0 ZR=0.0 ZI=0.0 C CCCCCC HIER DER ITERIERTE TEIL C 400 ZRN=ZR*ZR-ZI*ZI+X ZI=2.0*ZR*ZI+Y ZR=ZRN C IF ((ZR*ZR+ZI*ZI).GE.CMPVAL) GO TO 410 COUNT=COUNT+1 IF (COUNT.GE.MAXI) GO TO 410 GO TO 400 C CCCCCC PUNKT FERTIG 410 NOUT=32 C IF (COUNT.GE.8) NOUT=46 C IF (COUNT.GE.23) NOUT=43 C IF (COUNT.EQ.MAXI) NOUT=64 IF (COUNT.GE.8) NOUT=46 IF (COUNT.GE.23) NOUT=43 IF (COUNT.EQ.MAXI) NOUT=64 PX(1)=X PY(1)=Y CALL RSW(8,I) IF (COUNT.EQ.MAXI) CALL PLOT(1,PX,PY) IF(I.EQ.1) GO TO 500 C CC 411 CALL PCHAR(NOUT) C CCCCCC NEUEN PUNKT MACHEN 500 X = X + XSTEP CCCCCC ZEILE NOCH NICHT VOLL? IF (X.LE.HIGHX) GO TO 300 CCCCCC X AN ANFANG SETZTEN, CR+LF DRUCKEN X = LOWX CC CALL PCHAR(13) IF(I.EQ.1) GO TO 501 CC CALL PCHAR(10) CCCCCC Y WEITERRUECKEN - NEGATIV WEIL WIR VON OBEN KOMMEN 501 Y=Y-YSTEP IF (Y.GE.LOWY) GO TO 300 C CCCCCC HIER IST DAS BILD FERTIG. RETURN END