首页 分享 教你如何用python画出4种风格不一的树

教你如何用python画出4种风格不一的树

来源:花匠小妙招 时间:2025-01-12 03:09

前言:

在编程世界中,美丽的图形和艺术创作并非遥不可及。Python,这个强大而灵活的编程语言,不仅仅局限于数据分析和算法实现,它还能成为你探索创造力的画布。本文将带你进入一个富有趣味性和创意的领域,通过Python编程语言,我们将学习如何绘制出四种截然不同风格的树,从而让编程和艺术的边界变得更加模糊。

无需拥有艺术家的天赋,只需一颗对编码的热爱心,你将发现绘制树木并不是一件复杂的任务。让我们一同探索,如何用Python在画布上勾勒出令人惊艳的树木形态,将编程与艺术完美融合。

教你如何用python画出4种风格不一的树

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

# coding=gbk import turtle as T import random import 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()02 江南有丹橘,经冬犹绿林

# 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()03 落红不是无情物,化作春泥更护花

# 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()04 川原秋色静,芦苇晚风鸣

import turtle import random stack = [] 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) t = 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中进行绘图通常需要使用绘图库。以下是一些常用的Python绘图库,它们为我们提供了强大的绘图功能:

Matplotlib:

Matplotlib 是一个广泛使用的绘图库,用于生成各种静态、动态、交互式的图表。它支持线图、散点图、直方图、饼图等多种图形类型,适用于数据可视化和科学绘图。

import matplotlib.pyplot as plt # 示例:绘制简单的折线图 x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.plot(x, y) plt.xlabel('X轴标签') plt.ylabel('Y轴标签') plt.title('简单折线图') plt.show()

Turtle:

Turtle 是一个适用于教育和初学者的图形库,通过控制一个小海龟图标的移动,可以绘制出各种形状和图案。它提供了一个简单而直观的界面,适合初学者入门。

from turtle import Turtle, Screen # 示例:绘制一个简单的正方形 screen = Screen() turtle = Turtle() for _ in range(4): turtle.forward(100) turtle.right(90) screen.exitonclick()

Pygame:

Pygame 是专门用于游戏开发的库,但它也提供了强大的绘图功能。通过 Pygame,你可以创建窗口、加载图像,并在屏幕上进行绘制。

import pygame # 示例:绘制一个红色矩形 pygame.init() screen = pygame.display.set_mode((400, 300)) pygame.draw.rect(screen, (255, 0, 0), (50, 50, 100, 100)) pygame.display.flip() pygame.time.delay(2000) pygame.quit()

这些库都有详细的文档和丰富的示例代码,可以帮助你更深入地了解和应用它们。选择适合你目的的绘图库,并根据需求掌握相关基本绘图知识,将有助于你在Python中进行各种图形的绘制。

拓展应用:

在学会如何用Python画出不同风格的树之后,你可以进一步将所学的绘图技巧应用于其他图形,增添更多创意和趣味。以下是一些拓展应用的示例:

花朵的绘制:

借助相似的绘图技巧,你可以尝试绘制出各种花朵的形状。利用循环和基本的图形元素,创造出美丽的花瓣和花蕊。

import turtle def draw_flower(): screen = turtle.Screen() screen.bgcolor("white") flower = turtle.Turtle() flower.shape("turtle") flower.color("red") for _ in range(36): flower.forward(100) flower.right(45) flower.forward(100) flower.right(45) flower.forward(100) flower.right(45) flower.forward(100) flower.right(45) flower.forward(100) flower.right(10) screen.exitonclick() draw_flower()云彩的模拟:

通过使用不同的曲线和形状,你可以模拟出多种云彩的外观。这是一个有趣的练习,可以在天空的背景中添加逼真的云朵效果。

import turtle def draw_cloud(): screen = turtle.Screen() screen.bgcolor("skyblue") cloud = turtle.Turtle() cloud.shape("circle") cloud.color("white") for _ in range(5): cloud.forward(50) cloud.left(45) screen.exitonclick() draw_cloud()风景画的创建:

将所学的绘图技巧整合,创造出整个风景画。这可能包括绘制树木、湖泊、山脉等元素,将多种图形结合起来,形成一个完整的自然场景。

import turtle def draw_landscape(): screen = turtle.Screen() screen.bgcolor("lightblue") landscape = turtle.Turtle() landscape.color("green") landscape.penup() landscape.goto(-200, -100) landscape.pendown() landscape.begin_fill() for _ in range(2): landscape.forward(400) landscape.right(90) landscape.forward(200) landscape.right(90) landscape.end_fill() screen.exitonclick() draw_landscape()动画效果的实现:

利用循环和逐帧绘制的技巧,你可以尝试创造简单的动画效果。例如,让树木在风中摇摆,或者实现一个太阳升起的动画场景。

import turtle def animate_tree(): screen = turtle.Screen() screen.bgcolor("white") tree = turtle.Turtle() tree.shape("turtle") tree.color("green") for _ in range(36): tree.forward(100) tree.right(45) tree.forward(100) tree.right(45) tree.forward(100) tree.right(45) tree.forward(100) tree.right(45) tree.forward(100) tree.right(10) tree.clear() screen.exitonclick() animate_tree()自定义图案的设计:

运用你学到的基本绘图知识,设计和绘制出个性化的图案。这可以是几何图形的组合,也可以是抽象的艺术作品。尝试将代码变成一种创作工具,发挥你的创意。

import turtle def draw_custom_pattern(): screen = turtle.Screen() screen.bgcolor("white") pattern = turtle.Turtle() pattern.speed(2) for _ in range(36): pattern.forward(100) pattern.right(170) screen.exitonclick() draw_custom_pattern()

这些代码示例只是简单的起点,你可以根据需求和创意对代码进行修改和扩展,创造出更加独特和复杂的图形效果。

结尾:

在这篇博客中,我们共同踏上了一场通过Python编程语言描绘树木之旅。从最简单的形态到复杂的细节,我们学到了如何运用Python的绘图库,呈现出四种独特风格的树木。这不仅仅是一次技术实践,更是对创造力的一次释放。

无论你是编程新手还是有经验的开发者,本文希望能激发你对编程艺术的兴趣,让你在代码的世界里找到更多的乐趣。绘制树木只是创意编程的冰山一角,让我们一同探索更多的可能性,用代码创造出属于自己的艺术品。愿你在编程的旅途中,不仅发现技术的奥秘,更发现其中蕴含的美丽。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。

原始发表:2024-01-11,

如有侵权请联系 cloudcommunity@tencent.com 删除

相关知识

如何用python画玫瑰花
金黄色菊花怎么画?如何用圆珠笔画出工笔效果?
如何用python画花
如何用简单的Python绘制一朵花
【绘画教程】6步教你画出高贵典雅的郁金香,简笔画教程
如何用python画一朵花
如何用python画一束花
情人节教你如何用Python表白
python图形绘制花朵代码,如何用python画一朵花
如何用芽接的方法嫁接树

网址: 教你如何用python画出4种风格不一的树 https://www.huajiangbk.com/newsview1548468.html

所属分类:花卉
上一篇: 精选《小王子和玫瑰花壁纸》大合集
下一篇: 如何让你的PCA图更加生动有趣?

推荐分享