美文网首页Python 文库
turtle - turtledemo - forest [三棵

turtle - turtledemo - forest [三棵

作者: 巭牛猫 | 来源:发表于2021-02-05 14:57 被阅读0次
【 三 棵 树 】

#!/usr/bin/env python3

"""    turtlegraphics-example-suite:

            tdemo_forest.py

Displays a 'forest' of 3 breadth-first-trees

similar to the one in tree.

For further remarks see tree.py

This example is a 'breadth-first'-rewrite of

a Logo program written by Erich Neuwirth. See

http://homepage.univie.ac.at/erich.neuwirth/

"""

from turtle import Turtle, colormode, tracer, mainloop

from random import randrange

from time import perf_counter as clock

def symRandom(n):

    return randrange(-n,n+1)

def randomize( branchlist, angledist, sizedist ):

    return [ (angle+symRandom(angledist),

              sizefactor*1.01**symRandom(sizedist))

                    for angle, sizefactor in branchlist ]

def randomfd( t, distance, parts, angledist ):

    for i in range(parts):

        t.left(symRandom(angledist))

        t.forward( (1.0 * distance)/parts )

def tree(tlist, size, level, widthfactor, branchlists, angledist=10, sizedist=5):

    # benutzt Liste von turtles und Liste von Zweiglisten,

    # fuer jede turtle eine!

    if level > 0:

        lst = []

        brs = []

        for t, branchlist in list(zip(tlist,branchlists)):

            t.pensize( size * widthfactor )

            t.pencolor( 255 - (180 - 11 * level + symRandom(15)),

                        180 - 11 * level + symRandom(15),

                        0 )

            t.pendown()

            randomfd(t, size, level, angledist )

            yield 1

            for angle, sizefactor in branchlist:

                t.left(angle)

                lst.append(t.clone())

                brs.append(randomize(branchlist, angledist, sizedist))

                t.right(angle)

        for x in tree(lst, size*sizefactor, level-1, widthfactor, brs,

                      angledist, sizedist):

            yield None

def start(t,x,y):

    colormode(255)

    t.reset()

    t.speed(0)

    t.hideturtle()

    t.left(90)

    t.penup()

    t.setpos(x,y)

    t.pendown()

def doit1(level, pen):

    pen.hideturtle()

    start(pen, 20, -208)

    t = tree( [pen], 80, level, 0.1, [[ (45,0.69), (0,0.65), (-45,0.71) ]] )

    return t

def doit2(level, pen):

    pen.hideturtle()

    start(pen, -135, -130)

    t = tree( [pen], 120, level, 0.1, [[ (45,0.69), (-45,0.71) ]] )

    return t

def doit3(level, pen):

    pen.hideturtle()

    start(pen, 190, -90)

    t = tree( [pen], 100, level, 0.1, [[ (45,0.7), (0,0.72), (-45,0.65) ]] )

    return t

# Hier 3 Baumgeneratoren:

def main():

    p = Turtle()

    p.ht()

    tracer(75,0)

    u = doit1(6, Turtle(undobuffersize=1))

    s = doit2(7, Turtle(undobuffersize=1))

    t = doit3(5, Turtle(undobuffersize=1))

    a = clock()

    while True:

        done = 0

        for b in u,s,t:

            try:

                b.__next__()

            except:

                done += 1

        if done == 3:

            break

    tracer(1,10)

    b = clock()

    return "runtime: %.2f sec." % (b-a)

if __name__ == '__main__':

    main()

    mainloop()

===
内容来源:官方文库
牛猫名言:最好的资料就是官方文档
===
本文链接:https://www.jianshu.com/p/34b1d5377627
转载请注明,谢谢!
编辑:牛猫大侠

相关文章

网友评论

    本文标题:turtle - turtledemo - forest [三棵

    本文链接:https://www.haomeiwen.com/subject/aajktltx.html