ZX-LSYS LINDENMAYER SYSTEMS #! !^ #¾ š^ #š ™^ #šš¾ ¾šš™ ™šš^ _ #š_ _š^ _ _ _ _ _ _ _ #¾ _ ! ! _ ™^ #¾ ™š š¾ ™^ ! #šš^! !#šš^ ! _ _ _ ! ! _ _ _ ™¾šš! !šš! !šš™¾ _ _ _ _ _ _ _ _ #^šš! !šš! !šš#^ _ _ _ ! ! _ _ _ ! ™šš¾! !™šš¾ ! ™^ #š š^ #¾ ™^ _ ! ! _ #¾ _ _ _ _ _ _ _ ™š_ _š¾ _ ™šš^ ^šš# #šš¾ ™^ š¾ ™š #¾ zx-lsys lindenmayer systems L-SYSTEMS, OR STRING REWRITING SYSTEMS, PRODUCE CHAR. STRINGS WHICH CAN BE INTERPRETED AS CUR- VES AND PICTURES. REWRITING SYS- TEMS PROVIDE AN ELEGANT WAY TO GENERATE THE CLASSIC FRACTL CUR- VES, SUCH AS THE KOCH SNOWFLAKE CURVE AND SPACE FILLING CURVES OF PEANO ND HILBERT.IT ALSO PRO- VIDES A MODELING TECHNIQUE WHICH YIELDS RELATIVELY REALISTC LOOK- ING NATURAL OBJECTS, SUCH AS PLANTS. THE PROG. PRESENTED HERE IS BASED ON AN ALGORTHM BY DIET- MAR SAUPE CONTAINED IN THE BOOK "THE SCIENCE OF FRACTAL IMAGES" EDITED BY HEINZ-OTTO PEITGEN AND DIETMAR SAUPE,SPRINGER-VERLG,(C) 1988. program inputs THE PROG. USES A LOGO-LIKE SYS- TEM OF CHAR. COMMANDS TO DEFINE A CURVE OR IMAGE. THE CHAR. COM- MANDS FORM A STRNG WHICH IS EXP- ANDED ND MANIPULATD BY THE PROG- RAM TO PRODUCE THE FINAL IMAGE. THE CHARACTERS WERE CHOSEN TO BE MNEMONICALLY SENSIBLE, I THINK. THE COMMANDS AVAILABLE ARE; F: MOVE FORWARD/DRAW THE LINE M: MOVE FORWARD/DO NOT DRAW LINE R: TURN RIGHT BY INPUT ANGLE L: TURN LEFT BY INPUT ANGLE T: TURN AROUND, TURN BY 180 DEGS S: STACK CURRENT STATUS P: POP STATUS OFF THE STACK ONLY THE ABOVE CHAR. ARE INTER- PRETED BY THE DRAWING ROUTINE. program inputs BEFORE YOU CAN CREATE AN IMAGE YOU WILL HAVE TO ENTER SEVERAL PARAMETERS, THESE ARE EXPLAIN- ED HERE. * NAME OF CURVE: GIVE YOUR CREATION A TITLE FOR LATER REFERENCE, OPTIONAL. * AXIOM$: THIS IS A SHORT STRNG OF CHARAC- TERS WHICH DEFINES THE 0 LEVEL, THE INITIATION STRING FOR THE IMAGE. EACH CHARACTER OF THE AXIOM$ WILL BE REPLACD BY A STR- ING TAKN FROM A TABLE OF PRODUC- TION RULES. THE AXIOM$ ALNG WITH THE PRODUCTION RULES MAY BE REG- ARDED AS THE GENES WHICH CONTROL THE GROWTH OF THE OBJECT. program inputs * NO. OF RULES: THE NUMBER OF PRODUCTION RULES USED BY THE IMAGE. * CODE FOR RULE ?: EACH PRODUCTION RULE HAS IT"S OWN CODE. * LONGEST RULE: CHARACTER LENGTH OF LONGEST RULE NEEDED TO DIM THE RULE TABLE,TOO LONG IS OK, TOO SHORT IS NOT OK. * RULE ?: THE RULE FOR EACH OF THE RULE CODES. FOR EXAMPLE, A RULE COULD BE CODED AS "X" WHERE THE ASSOC- IATED RULE EQUALS "FLFRRFLF", HENCE THE NOTATION X->FLFRRFLF CAN BE READ AS REPLACE EVERY X IN THE STRING WITH FLFRRFLF. program inputs * TURNING ANGLE (360/N): THIS DETERMINES THE ANGLE USED BY THE TURN INSTRUCTIONS R AND L IF N=6 THE ANGLE USED WILL BE 60 DEGREES (360/6). * ROTATION: nONE lEFT rIGHT fLIP ROTATES THE IMAGE AS INDICATED. * NO. OF LEVELS: DETERMINES HOW MANY GENERATIONS ARE PRODUCED. LET"S LOOK AT ONE SIMPLE EXAMPLE THE "VON KOCH CURVE". von koch curve AXIOM$:F NO. OF RULES:1 CODE FOR RULE 1:F LONGEST RULE:8 CHRS. TURNING ANGLE:6(60 DEG) NO. OF LEVELS:2 code rule RULE 1: F->FLFRRFLF šššššššššššššššššššššššššššššššš WE"VE SELECTED 2 DO 2 LEVELS, SO THE DATA$ IS PROCESSED 2 TIMES. L-0, DATA$=F,THE AXIOM$ NOW REPLACE F WITH RULE 1 L-1, DATA$=FLFRRFLF REPLACE EACH F WITH RULE 1 L-2, DATA$=flfrrflfLflfrrflfRR flfrrflfLflfrrflf von koch curve # LEVEL 1 __ DATA$=FLFRRFLF _ _ _ ! _ ™^ #¾ _ ! _ #¾ ™^ ! # ! ššššššššššš¾ !_ ™ššššššššššš #¾™^ LEVEL 2 #ššš! !ššš^ ™^ _ ! #¾ ^ ™^ ! ^ #^ #¾ _ #^ ! ! ! ! ! ! šššš¾ ™šššš¾ ™šššš¾ ™šššš DATA$=FLFRRFLFLFLFRRFLFRRFLFRRFL FLFLFRRFLF von koch curve ^ LEVEL 3 š!_š # ! _ # #š¾™! _š¾™^ ™^ _ #™ š_ # ! _ # #š¾™^ #š¾ ™^ #š¾™^ ^™^ _ ^™^ _ ^™^ _ ^ š!_š¾ ™!_š¾ ™!_š¾ ™!_š DATA$=FLFRRFLFLFLFRRFLFRRFLFRRFL FLFLFRRFLFLFLFRRFLFLFLFRRF LFRRFLFRRFLFLFLFRRFLFRRFLF RRFLFLFLFRRFLFRRFLFRRFLFLF LFRRFLFLFLFRRFLFLFLFRRFLFR RFLFRRFLFLFLFRRFLF program inputs IF MORE LEVELS HAD BEEN INPUT THE ABOVE PROCESS WOULD CONTINUE AS YOU CAN SEE THE DATA STRING WILL BE QUITE LONG IN ONLY A FEW LEVELS, THE HIGHER THE LEVEL THE MORE DETAIL WILL BE SEEN. IT IS ALWAYS BEST TO START OUT WITH LEVELS 1, 2, OR 3. HIGHER LEVELS WILL ALSO TAKE LONGER 2 COMPLETE YOU MAY ALSO GET AN 4/XXXX "OUT OF MEMORY" ERROR CODE. IF YOU HAVE THE RAM THEN RAISE RAMTOP TO MAKE ROOM FOR MORE LEVELS TO BE INPUT. program inputs * SCALE TO FIT?(Y/N) SELECT "Y" AND THE IMAGE WILL BE SCALED TO FIT THE 64X44 PIXEL DISPLAY. SELECT "N" AND THE PIC WILL BE DRAWN FULL SIZE. YOU"D USUALLY PICK "N" WHEN THE SCALED IMAGE LOSES DEFINITION,IT"S JUST A BIG BLACK BLOB. UNFORTUNATLY, YOU MAY NOT SEE MUCH OF IT DE- PENDNG ON THE IMAGE AS IT IS THE SW CORNER WHICH IS DISPLAYED. IT WORKS WELL ON HILBERT AND OTHERS THAT FILL THE WHOLE DISPLAY THOUGH. program inputs * USE FAST MODE?(Y/N) SELECT "Y" AND THE IMAGE WILL BE DRAWN IN FAST MODE. THE PIC CAN TAKE QUITE AWHILE TO BE DRAWN AT HIGHER LEVELS I RECOMMEND USING THE "NO$ZX" EMULATOR AS IT MAINTAINS THE DISPLAY IN FAST MODE. I HAVEN"T FOUND THIS FEATURE IN EIGHTYONE. MUCH MORE COMPLEX L-SYSTEMS HAVE BEEN DEVELOPED, BUT THIS BARE BONES VERSION WORKS NICELY WITH THE BLOCKY GRAPHICS OF THE ZX81. THIS PROG. SHOULD RUN ON A STOCK 16K ZX81/TS100 WITH NO PROBLEMS. šššššššššššššššššššššššššššššššš VIEW sAMPLES LOAD zX-LSYS rE-RUN