前言
立冬啦!正式步入冬天,不過長沙的天氣在這兩天時好時壞,但是在今天出太陽啦曬曬太陽,突然想到之前畫了個櫻花的視頻,然后趁著心情好就把它決議出來,嘿嘿是真的還蠻好看的,而且一個代碼可以隨機畫出多種樣式的,一起來看看叭
完成目標
通過Python繪制櫻花樹

視頻展現:

因為一種櫻花樹要畫比較久,我也就稍微展示一下啦,當然還有很多種就沒有一一錄屏了,可以自行去研究哦,嘻嘻嘻
工具準備
開發工具:pycharm
開發環境:python3.7, Windows11
使用工具包:turtle
專案決議思路
專案思路分為3部分:
- 繪制櫻花的落葉花瓣,掉落的花瓣
- 給櫻花樹添加樹枝
- 給櫻花樹添加繪畫背景
- 顏色的繪制選取各種樣式的顏色
繪制掉落花瓣功能
確定花瓣掉落的數量,掉落的花瓣數根據櫻花樹枝來判斷,和樹枝數乘15,樹畫的越大掉的就越多哈
設定花瓣的坐標花瓣的大小設定為(10,10)控制畫筆移動到指定區域提筆,向前y,左轉90,走x,落筆,畫出花瓣形狀,繪畫完所以的花瓣數量就ok,在將畫的形狀指定顏色,在勾勒出圓形,回到起點提筆,后退x,右轉90,后退y,落筆
def draw_petal(turtle_obj, flower):
# 繪制掉落的花瓣
for i in range(int(flower)):
# 有正有負就可以讓畫筆往二個方向走
x = flower - 4 * flower * random()
# 花瓣整體寬度(-10, 10)
y = 10 - 20 * random()
# 提筆,向前y,左轉90,走x,落筆
turtle_obj.penup()
turtle_obj.forward(y)
turtle_obj.left(90)
turtle_obj.forward(x)
turtle_obj.pendown()
# 珊瑚色
turtle_obj.pencolor("lightcoral")
# 畫圓
turtle_obj.circle(1)
# 回到起點
# 提筆,后退x,右轉90,后退y,落筆
turtle_obj.penup()
turtle_obj.backward(x)
turtle_obj.right(90)
turtle_obj.backward(y)
turtle_obj.pendown()
復制代碼
畫樹枝部分
python超全資料庫安裝包學習路線專案原始碼免費分享
確定樹枝數量,顏色的色號選擇,先默認設定最小的樹枝分支長度個樹枝兩邊設定顏色能看起來更加的好看,左邊為白色,右邊為珊瑚色,分支的概率設定在0.5,樹枝可以設定成隨機生長,通過亂數設定
# 畫樹枝部分
def draw_tree(turtle_obj, branch, tree_color):
# 設定一個最小分支長度
min_branch = 4
if branch > min_branch:
if branch < 8:
# 以0.5的概率,向左、右分支
if randint(0, 1) == 0:
# 左為白色
turtle_obj.pencolor("snow")
else:
# 右為珊瑚色
turtle_obj.pencolor("lightcoral")
# 枝干
turtle_obj.pensize(branch / 2)
elif 8 <= branch <= 16:
# 以0.33的概率,分為左、中、右分支
if randint(0, 2) == 0:
# 左為白色
turtle_obj.pencolor("snow")
else:
# 中、右為珊瑚色
turtle_obj.pencolor("lightcoral")
# 樹枝
turtle_obj.pensize(branch / 4)
else:
# 褐色
turtle_obj.pencolor(tree_color)
# 細枝
turtle_obj.pensize(branch / 10)
# 最開始的樹干長度
turtle_obj.forward(branch)
# 隨機度數因子
a = 1.5 * random()
# 順時針旋轉隨機角度(0~30度)
turtle_obj.right(20 * a)
# 隨機長度因子
b = 1.5 * random()
# 往右畫,直到畫不動為止
draw_tree(turtle_obj, branch - 10 * b, tree_color)
# 左轉隨機角度
turtle_obj.left(40 * a)
# 往左畫,直到畫不動位置
draw_tree(turtle_obj, branch - 10 * b, tree_color)
# 右轉一定角度
turtle_obj.right(20 * a)
# 提筆
turtle_obj.penup()
# 遞回結束回到起點
turtle_obj.backward(branch)
turtle_obj.pendown()
復制代碼
創建畫布,將資料顏色進行添加,設定好運行的加速倍數
def get_screen(width, height, color, speed):
# 創建畫幕
screen_obj = turtle.Screen()
# 畫布大小:(width, height),顏色:color
screen_obj.screensize(width, height, bg=color)
screen_obj.setup(1.0, 1.0)
# speed倍加速
screen_obj.tracer(speed)
return screen_obj
復制代碼
顏色畫布畫筆的選擇:
- 樹干的顏色
- 畫筆的大小
- 前進的相素格
- 創建畫筆
- 畫筆的粗細調整
- 提筆落筆的選擇
- 畫筆的顏色配置
- 設定常量引數 枝干的粗細 落花數 第幾顆數
def trees(tree_num):
# 顏色
color = ['brown', 'tan', 'black']
for j in range(tree_num):
# 樹干顏色
tree_color = color[randint(0, len(color) - 1)]
# 畫筆大小
pensize = randint(2, 5)
# 前進像素
forward = ((-1) ** pensize) * pensize * randint(20, 50)
# 后退像素
if pensize <= 3:
backward = ((-1) ** pensize) * (5 - pensize) * randint(10, 15)
else:
backward = pensize * randint(45, 50)
# 創建畫筆
turtle_obj = turtle.Turtle()
# 畫筆粗細
turtle_obj.pensize(pensize)
# 提筆,向前forward,左轉90,backward,落筆
turtle_obj.penup()
turtle_obj.forward(forward)
turtle_obj.left(90)
turtle_obj.backward(backward)
turtle_obj.pendown()
# 畫筆顏色:褐色
turtle_obj.pencolor(tree_color)
# 枝干粗細
branch = pensize * 15
# 落花數
flowers = branch
# 第j棵樹
draw_tree(turtle_obj, branch, tree_color)
# 花瓣
draw_petal(turtle_obj, flowers)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/354649.html
標籤:python
