Python笔下那些神奇的树

开发 后端
turtle是一只神奇的小海龟,可以画出大千世界。而turtle加入了python大家族,像是如龟得水,变得更加受欢迎。

turtle是一只神奇的小海龟,可以画出大千世界。而turtle加入了python大家族,像是如龟得水,变得更加受欢迎。

古人有诗云“庭中有奇树,绿叶发华滋”,树之美,或婀娜、或繁茂、或苍劲、或青翠。python-turtle笔下的树更是别有一番风味。

小园新种红樱树,闲绕花行便当游。 

  1. coding=gbk 
  2. import turtle as Timport randomimport time 
  3. # 画樱花的躯干(60,t) 
  4. def Tree(branch, t):    time.sleep(0.0005) 
  5.     if branch > 3: 
  6.         if 8 <= branch <= 12: 
  7.             if random.randint(0, 2) == 0: 
  8.                 t.color('snow')  # 白 
  9.             else: 
  10.                 t.color('lightcoral')  # 淡珊瑚色 
  11.             t.pensize(branch / 3) 
  12.         elif branch < 8: 
  13.             if random.randint(0, 1) == 0: 
  14.                 t.color('snow') 
  15.             else: 
  16.                 t.color('lightcoral')  # 淡珊瑚色 
  17.             t.pensize(branch / 2) 
  18.         else: 
  19.             t.color('sienna')  # 赭(zhě)色 
  20.             t.pensize(branch / 10)  # 6 
  21.         t.forward(branch)        a = 1.5 * random.random() 
  22.         t.right(20 * a) 
  23.         b = 1.5 * random.random() 
  24.         Tree(branch - 10 * b, t) 
  25.         t.left(40 * a) 
  26.         Tree(branch - 10 * b, t) 
  27.         t.right(20 * a) 
  28.         t.up()        t.backward(branch)        t.down()# 掉落的花瓣def Petal(m, t):    for i in range(m): 
  29.         a = 200 - 400 * random.random() 
  30.         b = 10 - 20 * random.random() 
  31.         t.up()        t.forward(b)        t.left(90) 
  32.         t.forward(a)        t.down()        t.color('lightcoral')  # 淡珊瑚色 
  33.         t.circle(1) 
  34.         t.up()        t.backward(a)        t.right(90) 
  35.         t.backward(b)# 绘图区域t = T.Turtle()# 画布大小w = T.Screen()# 隐藏画笔t.hideturtle()  t.getscreen().tracer(5, 0) 
  36. # wheat小麦w.screensize(bg='white')   
  37. t.left(90) 
  38. t.up()t.backward(150) 
  39. t.down()t.color('sienna') 
  40. # 画樱花的躯干Tree(60, t) 
  41. # 掉落的花瓣Petal(200, t) 
  42. w.exitonclick() 

江南有丹橘,经冬犹绿林

  1. coding=gbk 
  2. from turtle import *from random import * 
  3. from math import * 
  4. class Tree:    def __init__(self):        setup(1000, 500) 
  5.         bgcolor(1, 1, 1)  # 背景色 
  6.         # ht()  # 隐藏turtle        speed(10)  # 速度 1-10渐进,0 最快 
  7.         # tracer(1, 100)    # 设置绘图屏幕刷新频率,参数1设置在正常刷新频次的第参数1次刷新,参数2设置每次刷新的时延 
  8.         tracer(0, 0) 
  9.         pu()  # 抬笔        backward(100) 
  10.         # 保证笔触箭头方向始终不向下,此处使其左转90度,而不是右转 
  11.         left(90)  # 左转90度 
  12.         backward(300)  # 后退300 
  13.     def tree(self, n, l):        pd()  # 下笔        # 阴影效果        t = cos(radians(heading() + 45)) / 8 + 0.25 
  14.         pencolor(t, t, t)        pensize(n / 1.2) 
  15.         forward(l)  # 画树枝        if n > 0: 
  16.             b = random() * 15 + 10  # 右分支偏转角度 
  17.             c = random() * 15 + 10  # 左分支偏转角度 
  18.             d = l * (random() * 0.25 + 0.7)  # 下一个分支的长度 
  19.             # 右转一定角度,画右分支            right(b)            self.tree(n - 1, d) 
  20.             # 左转一定角度,画左分支            left(b + c)            self.tree(n - 1, d) 
  21.             # 转回来            right(c)        else: 
  22.             # 画叶子            right(90) 
  23.             n = cos(radians(heading() - 45)) / 4 + 0.5 
  24.             pencolor(n, n * 0.8, n * 0.8) 
  25.             fillcolor(n, n * 0.8, n * 0.8) 
  26.             begin_fill()            circle(3) 
  27.             left(90) 
  28.             end_fill()            # 添加0.3倍的飘落叶子 
  29.             if random() > 0.7: 
  30.                 pu()                # 飘落                t = heading()                an = -40 + random() * 40 
  31.                 setheading(an)                dis = int(800 * random() * 0.5 + 400 * random() * 0.3 + 200 * random() * 0.2) 
  32.                 forward(dis)                setheading(t)                # 画叶子                pd()                right(90) 
  33.                 n = cos(radians(heading() - 45)) / 4 + 0.5 
  34.                 pencolor(n * 0.5 + 0.5, 0.4 + n * 0.4, 0.4 + n * 0.4) 
  35.                 fillcolor(n, n * 0.8, n * 0.8) 
  36.                 begin_fill()                circle(2) 
  37.                 left(90) 
  38.                 end_fill()                pu()                # 返回                t = heading()                setheading(an)                backward(dis)                setheading(t)            # pass        pu()        backward(l)  # 退回def main():    tree = Tree()    tree.tree(12, 100)  # 递归7层 
  39.     done()if __name__ == '__main__': 
  40.     main() 

落红不是无情物,化作春泥更护花

  1. coding=gbk 
  2. from turtle import * 
  3. from random import * 
  4. # 画树方法def drawTree(n, l):    pendown()    pencolor('#5d3c3c') 
  5.     pensize( n / 1.5) 
  6.     forward(l)    if n > 0: 
  7.         dr = randint(30, 40) 
  8.         dl =  randint(30, 40) 
  9.         move = l * (random() * 0.4 + 0.5) 
  10.         right(dr)        drawTree(n - 1, move) 
  11.         left(dr + dl)        drawTree(n - 1, move) 
  12.         right(dl)    else: 
  13.         drawPetal(3) 
  14.     penup()    backward(l)# 花瓣位置生成def petalPlace(m, x, y):    penup()    goto(x, y) 
  15.     pendown()    setheading(0) 
  16.     tracer(False)    for i in range(m): 
  17.         if i == 0: 
  18.             drawPetal(5) 
  19.         else: 
  20.             penup()            goto(x, y) 
  21.             a = randint(20, 400) 
  22.             b = randint(-50, 50) 
  23.             forward(a)            left(90) 
  24.             forward(b)            right(90) 
  25.             pendown()            drawPetal(5) 
  26. # 花朵绘画方法def drawPetal(n):    colormode(255) 
  27.     r = randint(200, 255) 
  28.     g = randint(8, 158) 
  29.     b = randint(8, 158) 
  30.     begin_fill()    fillcolor(r, g, b)    pencolor(r, g, b)    circle(n)    end_fill()# 启动方法def run():    setup(1.0, 1.0) 
  31.     penup()    goto(-50, -150) 
  32.     left(90) 
  33.     pendown()    hideturtle()    tracer(False)    drawTree(13, 150) 
  34.     petalPlace(160, -100, -150) 
  35. run()done() 

川原秋色静,芦苇晚风鸣

Python笔下那些神奇的树

  1. import turtle 
  2. import randomstack = []def createWord(max_it, word, proc_rules, x, y, turn): 
  3.     turtle.up()    turtle.home()    turtle.goto(x, y)    turtle.right(turn)    turtle.down()    t = 0 
  4.     while t < max_it: 
  5.         word = rewrite(word, proc_rules)        drawit(word, 5, 20) 
  6.         tt = t+1 
  7. def rewrite(word, proc_rules): 
  8.     wordList = list(word)    for i in range(len(wordList)): 
  9.         curChar = wordList[i]        if curChar in proc_rules: 
  10.             wordList[i] = proc_rules[curChar]    return "".join(wordList) 
  11. def drawit(newWord, d, angle): 
  12.     newWordLs = list(newWord)    for i in range(len(newWordLs)): 
  13.         cur_Char = newWordLs[i]        if cur_Char == 'F': 
  14.             turtle.forward(d)        elif cur_Char == '+': 
  15.             turtle.right(angle)        elif cur_Char == '-': 
  16.             turtle.left(angle)        elif cur_Char == '[': 
  17.             state_push()        elif cur_Char == ']': 
  18.             state_pop()def state_push(): 
  19.     global stack 
  20.     stack.append((turtle.position(), turtle.heading()))def state_pop(): 
  21.     global stack 
  22.     position, heading = stack.pop()    turtle.up()    turtle.goto(position)    turtle.setheading(heading)    turtle.down()def randomStart(): 
  23.     x = random.randint(-300, 300) 
  24.     y = random.randint(-320, -280) 
  25.     heading = random.randint(-100, -80) 
  26.     return ((x, y), heading) 
  27. def main(): 
  28.     rule_sets = []    rule_sets.append(((3, 5), 'F', {'F':'F[+F][-F]F'})) 
  29.     rule_sets.append(((4, 6), 'B', {'B':'F[-B][+ B]', 'F':'FF'})) 
  30.     rule_sets.append(((2, 4), 'F', {'F':'FF+[+F-F-F]-[-F+F+F]'})) 
  31.     tree_count = 50 
  32.     turtle.tracer(10, 0) 
  33.     for x in range(tree_count): 
  34.         rand_i = random.randint(0, len(rule_sets) - 1) 
  35.         selected_ruleset = rule_sets[rand_i]        i_range, word, rule = selected_ruleset        low, high = i_range        i = random.randint(low, high)        start_position, start_heading = randomStart()        start_x, start_y = start_position        createWord(i, word, rule, start_x, start_y, start_heading)if __name__ == '__main__': main() 

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2016-08-04 13:42:25

ExcelExcel快捷键

2021-05-05 14:00:25

QQ手机QQ移动应用

2018-09-03 16:05:03

编程语言Python代码技巧

2020-06-08 07:52:31

Python开发工具

2021-11-02 16:25:41

Python代码技巧

2024-01-03 08:12:10

计算求和Python内置函数

2019-10-15 15:15:31

Python大数据函数

2024-04-01 05:00:00

GUIpythonDearPyGui

2017-08-08 16:04:30

2020-07-13 07:27:16

Python开发

2021-03-09 23:12:51

Python集合项目

2010-03-05 13:44:00

Python序列

2020-06-23 07:50:13

Python开发技术

2021-12-09 15:45:09

Python弱引用代码

2023-12-13 10:46:27

2022-12-28 08:59:11

2021-01-01 14:36:03

Python开发语言

2017-02-09 16:15:33

Erlang并发运算符

2023-08-04 14:31:43

Python核心项目

2021-09-04 07:56:44

Pythonos模块
点赞
收藏

51CTO技术栈公众号