سیستم ال L-system و لیست ها در پایتون

سیستم ال L-system و لیست ها در پایتون

خب در این قسمت ادامه مبحث سیستم ال و اجرای اون در پایتون رو داریم با این تفاوت که در این قسمت از لیست ها برای نمایش سیستم ال استفاده می کنیم .

برای دیدن قسمت اول اینجا کلیک کنید .

فرض میکنیم قانون زیر را داریم :

X

X –> F[-X]+X

F –> F

این سیستم خیلی شبیه به سیستم قبلی در آموزش قبلی است با یک تفاوت در این قانون ما دو کارکتر  “]” و ”[” را اضافه کردیم این دو کاراکتر ویژگی بسیار جالبی به سیستم ال ما میدهند اولی به این معنی است که ما میخواهیم موقعیت قلم خودمون رو در این مرحله به خاطر بسپریم و کارکتر دوم به این معنی است که میخواهیم موقعیت قلم رو به آخرین جای ذخیره شده برگردانیم . برای این که بتوانیم این سیستم را در پایتون اجرا کنیم بایستی از لیستها استفاده کنیم . در این مرحله موقعیت و زاویه قلم رو در یک لیست به شکل [heading x y] ذخیره میکنیم .

حالا تابع drawLsystem به شکل زیر می نویسیم:

 

import turtle

def drawLsystem(aTurtle, instructions, angle, distance):
    savedInfoList = []
    for cmd in instructions:
        if cmd == 'F':
            aTurtle.forward(distance)
        elif cmd == 'B':
            aTurtle.backward(distance)
        elif cmd == '+':
            aTurtle.right(angle)
        elif cmd == '-':
            aTurtle.left(angle)
        elif cmd == '[':
            savedInfoList.append([aTurtle.heading(), aTurtle.xcor(), aTurtle.ycor()])
            print(savedInfoList)
        elif cmd == ']':
            newInfo = savedInfoList.pop()
            aTurtle.setheading(newInfo[0])
            aTurtle.setposition(newInfo[1], newInfo[2])

t = turtle.Turtle()
inst = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF[-FFFFFFFFFFFFFFFF[-FFFFFFFF[-FFFF[-FF[-F[-X]+X]+F[-X]+X]+FF[-F[-X]+X]+F[-X]+X]+FFFF[-FF[-F[-X]+X]+F[-X]+X]+FF[-F[-X]+X]+F[-X]+X]+FFFFFFFF[-FFFF[-FF[-F[-X]+X]+F[-X]+X]+FF[-F[-X]+X]+F[-X]+X]+FFFF[-FF[-F[-X]+X]+F[-X]+X]+FF[-F[-X]+X]+F[-X]+X]+FFFFFFFFFFFFFFFF[-FFFFFFFF[-FFFF[-FF[-F[-X]+X]+F[-X]+X]+FF[-F[-X]+X]+F[-X]+X]+FFFF[-FF[-F[-X]+X]+F[-X]+X]+FF[-F[-X]+X]+F[-X]+X]+FFFFFFFF[-FFFF[-FF[-F[-X]+X]+F[-X]+X]+FF[-F[-X]+X]+F[-X]+X]+FFFF[-FF[-F[-X]+X]+F[-X]+X]+FF[-F[-X]+X]+F[-X]+X"
t.setposition(0, -200)
t.left(90)
drawLsystem(t, inst, 30, 2)

 

 

Share this post

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *