Programming Pandit

c/c++/c#/Javav/Python


Latest Update

Thursday, September 10, 2020

Lindenmayer systems Design Python programming Demo by G Krishna Chauhan

Source Code


#!/usr/bin/env python3

"""       turtle-example-suite:


        xtx_lindenmayer_indian.py


Each morning women in Tamil Nadu, in southern

India, place designs, created by using rice

flour and known as kolam on the thresholds of

their homes.


These can be described by Lindenmayer systems,

which can easily be implemented with turtle

graphics and Python.


Two examples are shown here:

(1) the snake kolam

(2) anklets of Krishna


Taken from Marcia Ascher: Mathematics

Elsewhere, An Exploration of Ideas Across

Cultures


"""

################################

# Mini Lindenmayer tool

###############################


from turtle import *


def replace( seq, replacementRules, n ):

    for i in range(n):

        newseq = ""

        for element in seq:

            newseq = newseq + replacementRules.get(element,element)

        seq = newseq

    return seq


def draw( commands, rules ):

    for b in commands:

        try:

            rules[b]()

        except TypeError:

            try:

                draw(rules[b], rules)

            except:

                pass



def main():

    ################################

    # Example 1: Snake kolam

    ################################



    def r():

        right(45)


    def l():

        left(45)


    def f():

        forward(7.5)


    snake_rules = {"-":r, "+":l, "f":f, "b":"f+f+f--f--f+f+f"}

    snake_replacementRules = {"b": "b+f+b--f--b+f+b"}

    snake_start = "b--f--b--f"


    drawing = replace(snake_start, snake_replacementRules, 3)


    reset()

    speed(3)

    tracer(1,0)

    ht()

    up()

    backward(195)

    down()

    draw(drawing, snake_rules)


    from time import sleep

    sleep(3)


    ################################

    # Example 2: Anklets of Krishna

    ################################


    def A():

        color("red")

        circle(10,90)


    def B():

        from math import sqrt

        color("black")

        l = 5/sqrt(2)

        forward(l)

        circle(l, 270)

        forward(l)


    def F():

        color("green")

        forward(10)


    krishna_rules = {"a":A, "b":B, "f":F}

    krishna_replacementRules = {"a" : "afbfa", "b" : "afbfbfbfa" }

    krishna_start = "fbfbfbfb"


    reset()

    speed(0)

    tracer(3,0)

    ht()

    left(45)

    drawing = replace(krishna_start, krishna_replacementRules, 3)

    draw(drawing, krishna_rules)

    tracer(1)

    return "Done!"


if __name__=='__main__':

    msg = main()

    print(msg)

    mainloop()




No comments:

Post a Comment