Jump to content
Sign in to follow this  

L-Systems fractal generator

Recommended Posts


This script draws fractals based on l-systems. For more info on l-systems read this.

The core is written in FreeBasic - the part wihich calculates the l-system. It can be done in autoit too, but it's very slow, so I made it with FB.

It's a command line application, which can be used separately from the autoit script which draws the gererated system.

The frontend (the GUI) is written in autoit.

The complete fractal generator is here: l_systems.zip - extract it somewhere and run lsystem-fe.au3.

Here are some screenshots:

Posted Image Posted Image Posted Image

Here is the autoit script:

and here is the FreeBasic source(this is just for informative purpose, if someone thinks that lsystem.exe is something that will harm his sistem... :rolleyes: ):


Function Split(inpstr As String, separator As String, xRes() As String)
    Dim i,n
    Dim a(Len(inpstr))
    Loop Until a(i)=1
    Redim xres(i+1)
    For n=0 To i-1
    Return i
End Function

Function lsystem (  s() As String, _
    r() As String, _
    Byval axiom As String, _
    Byval level As Integer _
    )   As String
    Dim axiom_ As String
    Dim axiom__ As String
    Dim iter As Integer
    Dim i As Integer
    Dim c As String
    Dim i1 As Integer
    axiom_ = axiom
    For iter = 0 To level-1
        axiom__ = ""
        For i = 1 To Len(axiom_)
            c = Mid(axiom_,i,1)
            For i1 = 0 To Ubound(s)-2
                If (c=s(i1)) Then
                End If
            axiom__ += c
        axiom_ = axiom__
    Return axiom_
End Function

If Command$(3)="" Then
    Print "L-System calculator by lokster (c)2007"
    Print ""
    Print "Usage: lsystem.exe <axiom> <rules> <level>"
    Print ""
    Print "Example (gererate the ""Dragon"" fractal at level 10):"
    Print ""
    Print " lsystem.exe FX ""F%F&X%X+YF+&Y%-FX-Y"" 10"
    Print ""
    Print "Please note, that the second parameter MUST be surrounded by double-quotes!" 
    Dim a As String
    Dim res() As String
    a = Ucase( Command$(2))
    Dim s(Ubound(res)) As String
    Dim r(Ubound(res)) As String
    For rep = 1 To Ubound(res)-1
        Dim par() As String
        s(rep-1) = par(1)
        r(rep-1) = par(2)
    Print lsystem(s(),r(),Ucase(Command$(1)),Valint(Command$(3)))
End If


Edited by lokster

Share this post

Link to post
Share on other sites

Awesome. :rolleyes:

Edit: Don't try 25 iterations..

Edited by Manadar

Share this post

Link to post
Share on other sites

I get an error.. would have loved to see this work..

I checked to solve it myself, but I didn't see the mistake immediately)

probably the space in teh path to lsystems.exe. too busy at work to put too much effort in it at the moment (and I'm sure you'll know what this error is about) :-)

>Running:(\Program Files\AutoIt3\autoit3.exe "C:\Documents and Settings\gii761\Desktop\Scripting\fractals based on L-system\lsystem-fe.au3"  
C:\Documents and Settings\gii761\Desktop\Scripting\fractals based on L-system\lsystem-fe.au3 (119) : ==> Unable to execute the external program.: 
$pid = Run(@ScriptDir & "\lsystem.exe " & $axiom & " """ & $rules & """ " & $level, @ScriptDir, @SW_HIDE, $STDOUT_CHILD)

Share this post

Link to post
Share on other sites

Corrected. The problem was that the path contained spaces, and I forgot to surround it with quotes.

Share this post

Link to post
Share on other sites

may I also suggest following easy rule for string concatenation: (small tip)

follow kix methodology..

meaning start a string with a single quote.

then if you need to place a double quote simply place one double quote.

in vbscript you can build strings with series of 4 double quotes in a row.. not clean code, you're asking for errors here :rolleyes:

hope you get it to work man!

have a nice day!

Share this post

Link to post
Share on other sites

This is really nice! Good work.

My Programs:AInstall - Create a standalone installer for your programUnit Converter - Converts Length, Area, Volume, Weight, Temperature and Pressure to different unitsBinary Clock - Hours, minutes and seconds have 10 columns each to display timeAutoIt Editor - Code Editor with Syntax Highlighting.Laserix Editor & Player - Create, Edit and Play Laserix LevelsLyric Syncer - Create and use Synchronised Lyrics.Connect 4 - 2 Player Connect 4 Game (Local or Online!, Formatted Chat!!)MD5, SHA-1, SHA-256, Tiger and Whirlpool Hash Finder - Dictionary and Brute Force FindCool Text Client - Create Rendered ImageMy UDF's:GUI Enhance - Enhance your GUIs visually.IDEA File Encryption - Encrypt and decrypt files easily! File Rename - Rename files easilyRC4 Text Encryption - Encrypt text using the RC4 AlgorithmPrime Number - Check if a number is primeString Remove - remove lots of strings at onceProgress Bar - made easySound UDF - Play, Pause, Resume, Seek and Stop.

Share this post

Link to post
Share on other sites

Very Nice! Thanx...

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this