怎么用Python实现神奇的树效果

发布时间:2021-10-28 16:45:37 作者:iii
来源:亿速云 阅读:134

本篇内容主要讲解“怎么用Python实现神奇的树效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python实现神奇的树效果”吧!

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

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

怎么用Python实现神奇的树效果

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

怎么用Python实现神奇的树效果

# coding=gbk import turtle as Timport randomimport time # 画樱花的躯干(60,t) def Tree(branch, t):    time.sleep(0.0005)     if branch > 3:         if 8 <= branch <= 12:             if random.randint(0, 2) == 0:                 t.color('snow')  # 白             else:                 t.color('lightcoral')  # 淡珊瑚色             t.pensize(branch / 3)         elif branch < 8:             if random.randint(0, 1) == 0:                 t.color('snow')             else:                 t.color('lightcoral')  # 淡珊瑚色             t.pensize(branch / 2)         else:             t.color('sienna')  # 赭(zhě)色             t.pensize(branch / 10)  # 6         t.forward(branch)        a = 1.5 * random.random()         t.right(20 * a)         b = 1.5 * random.random()         Tree(branch - 10 * b, t)         t.left(40 * a)         Tree(branch - 10 * b, t)         t.right(20 * a)         t.up()        t.backward(branch)        t.down()# 掉落的花瓣def Petal(m, t):    for i in range(m):         a = 200 - 400 * random.random()         b = 10 - 20 * random.random()         t.up()        t.forward(b)        t.left(90)         t.forward(a)        t.down()        t.color('lightcoral')  # 淡珊瑚色         t.circle(1)         t.up()        t.backward(a)        t.right(90)         t.backward(b)# 绘图区域t = T.Turtle()# 画布大小w = T.Screen()# 隐藏画笔t.hideturtle()  t.getscreen().tracer(5, 0) # wheat小麦w.screensize(bg='white')   t.left(90) t.up()t.backward(150) t.down()t.color('sienna') # 画樱花的躯干Tree(60, t) # 掉落的花瓣Petal(200, t) w.exitonclick()

江南有丹橘,经冬犹绿林

怎么用Python实现神奇的树效果

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

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

怎么用Python实现神奇的树效果

# coding=gbk from turtle import * from random import * # 画树方法def drawTree(n, l):    pendown()    pencolor('#5d3c3c')     pensize( n / 1.5)     forward(l)    if n > 0:         dr = randint(30, 40)         dl =  randint(30, 40)         move = l * (random() * 0.4 + 0.5)         right(dr)        drawTree(n - 1, move)         left(dr + dl)        drawTree(n - 1, move)         right(dl)    else:         drawPetal(3)     penup()    backward(l)# 花瓣位置生成def petalPlace(m, x, y):    penup()    goto(x, y)     pendown()    setheading(0)     tracer(False)    for i in range(m):         if i == 0:             drawPetal(5)         else:             penup()            goto(x, y)             a = randint(20, 400)             b = randint(-50, 50)             forward(a)            left(90)             forward(b)            right(90)             pendown()            drawPetal(5) # 花朵绘画方法def drawPetal(n):    colormode(255)     r = randint(200, 255)     g = randint(8, 158)     b = randint(8, 158)     begin_fill()    fillcolor(r, g, b)    pencolor(r, g, b)    circle(n)    end_fill()# 启动方法def run():    setup(1.0, 1.0)     penup()    goto(-50, -150)     left(90)     pendown()    hideturtle()    tracer(False)    drawTree(13, 150)     petalPlace(160, -100, -150) run()done()

川原秋色静,芦苇晚风鸣

怎么用Python实现神奇的树效果

import turtle import randomstack = []def createWord(max_it, word, proc_rules, x, y, turn):     turtle.up()    turtle.home()    turtle.goto(x, y)    turtle.right(turn)    turtle.down()    t = 0     while t < max_it:         word = rewrite(word, proc_rules)        drawit(word, 5, 20)         tt = t+1 def rewrite(word, proc_rules):     wordList = list(word)    for i in range(len(wordList)):         curChar = wordList[i]        if curChar in proc_rules:             wordList[i] = proc_rules[curChar]    return "".join(wordList) def drawit(newWord, d, angle):     newWordLs = list(newWord)    for i in range(len(newWordLs)):         cur_Char = newWordLs[i]        if cur_Char == 'F':             turtle.forward(d)        elif cur_Char == '+':             turtle.right(angle)        elif cur_Char == '-':             turtle.left(angle)        elif cur_Char == '[':             state_push()        elif cur_Char == ']':             state_pop()def state_push():     global stack     stack.append((turtle.position(), turtle.heading()))def state_pop():     global stack     position, heading = stack.pop()    turtle.up()    turtle.goto(position)    turtle.setheading(heading)    turtle.down()def randomStart():     x = random.randint(-300, 300)     y = random.randint(-320, -280)     heading = random.randint(-100, -80)     return ((x, y), heading) def main():     rule_sets = []    rule_sets.append(((3, 5), 'F', {'F':'F[+F][-F]F'}))     rule_sets.append(((4, 6), 'B', {'B':'F[-B][+ B]', 'F':'FF'}))     rule_sets.append(((2, 4), 'F', {'F':'FF+[+F-F-F]-[-F+F+F]'}))     tree_count = 50     turtle.tracer(10, 0)     for x in range(tree_count):         rand_i = random.randint(0, len(rule_sets) - 1)         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()

到此,相信大家对“怎么用Python实现神奇的树效果”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. 神奇的 SNMP
  2. 用python实现圣诞树的代码

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:非常实用的JavaScript小技巧有哪些

下一篇:Mysql数据分组排名实现的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》