Retrocomputing

Inkblot

INKBLOT is a program that produces "inkblots" similar to those used in the famous Rorschach Inkblot tests. The program generates these inkblots randomly so that literally millions of different patterns can be produced.

INKBLOT is one of the programs in "More BASIC Computer Games".

PROCEDURE inkblot
PRINT TAB(26);"INKBLOT"
PRINT TAB(20);"CREATIVE COMPUTING"
PRINT TAB(18);"MORRISTOWN, NEW JERSEY"
PRINT \ PRINT \ PRINT
REM *** WORKS BY PLOTTING ELLIPSES AND THEIR MIRROR IMAGES
DIM A(12,13):REAL;B$:STRING[36];A$(36):STRING[1]
REM CHOOSE FROM 5 TO 12 ELLIPSES
M=INT(8*RND(1))+5
REM CREATE SIZE, LOCATION AND ANGLE OF M ELLIPSES
FOR L = 1 TO M
  A(L,1) = 34*RND(1)
  A(L,2) = 80*RND(1)
  A(L,3) = (15*RND(1)+2)^2
  A(L,4) = (15*RND(1)+2)^2
  T=PI*RND(1)
  A(L,5) = COS(T)
  A(L,6) = SIN(T)
  A(L,7) = A(L,5)*A(L,6)
  A(L,5) = A(L,5)*A(L,5)
  A(L,6) = A(L,6)*A(L,6)
  A(L,8) = A(L,1)*A(L,1)*A(L,6)
  A(L,9) = A(L,1)*A(L,1)*A(L,5)
  A(L,10) = A(L,1)*A(L,7)
  A(L,11) = -2*A(L,1)*A(L,6)
  A(L,12) = -2*A(L,1)*A(L,5)
  A(L,13) = A(L,6)/A(L,4)+A(L,5)/A(L,3)
NEXT L
REM *** PRINT TOP BORDER; B$ CONTAINS 36 DOLLAR SIGNS
B$="$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"
PRINT B$;B$
PRINT B$;B$
REM *** LOOP Y IS Y-COORDINATE OF PLOT; EACH TIME Y LOOP
REM *** IS EXECUTED, A LINE IS PRINTED
FOR Y = 79.9 TO 0 STEP -1.6
  A$(1) = "$" \ A$(2) = "$"
  FOR P = 3 TO 36 \ A$(P) = " " \ NEXT P
  REM *** LOOP E CHECKS THE EQUATION OF EACH ELLIPSE TO SEE
  REM *** IF IT INTERSECTS THE LINE TO BE PRINTED
  FOR E=1 TO M
    Y1=Y-A(E,2)
    Y2=Y1*Y1
    Y3=Y1*A(E,10)
    Y4=Y1*A(E,7)
    B=(A(E,12)+Y4)/A(E,3)+(-Y4+A(E,11))/A(E,4)
    C=(Y2*A(E,6)+A(E,9)-Y3)/A(E,3)+(Y2*A(E,5)+A(E,8)+Y3)/A(E,4)-1
    REM *** R IS THE RADICAL IN THE STANDARD QUADRATIC FORMULA
    R=B*B-4*A(E,13)*C
    IF R>=0 THEN
      R=SQR(R)
      REM *** FIND WHERE THE LINE INTERSECTS IN THE ELLIPSE
      R1=INT(-(B+R)/2/A(E,13)+1)
      IF R1<=34 THEN
        R2=INT((R-B)/2/A(E,13))
        IF R2>=1 THEN
          IF R2>=35 THEN R2=34 \ ENDIF
          IF R1<=0 THEN R1=1 \ ENDIF
          REM *** FILL IN THE LINE WHERE IT CROSSES THE ELLIPSE
          FOR J=R1+2 TO R2+2
            A$(J) = "$"
          NEXT J
        ENDIF
      ENDIF
    ENDIF
  NEXT E
  REM *** PRINT LINE
  FOR K=1 TO 36 STEP 1 \ PRINT A$(K); \ NEXT K
  FOR K=36 TO 1 STEP -1 \ PRINT A$(K); \ NEXT K
  PRINT
  NEXT Y
REM *** PRINT BOTTOM BORDER
PRINT B$;B$
PRINT B$;B$
END