用Python画一条祥龙,祝您新年龙腾万里
作者大部分时间周更,为了不错过精彩内容,请点击上方“ Python碎片 ”,“ 星标 ”公众号
龙年到了,祝大家新年龙行龘龘,龙腾万里!
从2021年开始,我每年都用Python画一幅当年生肖的图。
用Python标准库turtle画一头金牛,祝您新年牛气冲天!
用Python标准库turtle画一只老虎,祝您新年虎虎生威,大吉大利!
今年继续画一条祥龙,为大家送上祝福。
绘图过程录制成了如下视频,点击视频可以先看到效果。
视频展示
绘图结果
实现方法介绍
本文的绘图工具使用Python标准库turtle库,无需安装,导入即可使用。
部分函数用法介绍(如果已经知道基本用法可以跳过此部分):
画布设置
- title(): 设置窗口的标题。
- bgpic():设置背景图片。
- setup(width, height, x, y): 设置窗口大小和窗口左上角在屏幕中的位置。
- shape():设置鼠标的形状。
- done(): 绘图结束后,不自动关闭窗口。
画笔设置
- pencolor(color): 设置画笔颜色。
- width(): 设置画笔宽度。
- speed(int): 设置画笔的速度,传入1~10的数字,1最慢,10最快。传入其他值会更快,但是没有鼠标移动的动画效果。
- penup(): 提起画笔,提起后移动画笔不会留下痕迹。
- pendown(): 落下画笔,开始绘图前先将画笔落下。
- setx(value): 设置画笔的x轴坐标。
- sety(value): 设置画笔的y轴坐标。
- towards(x, y): 设置画笔指向的点。
- setheading(): 设置画笔的方向。与towards()配合可以设置画笔指向某个点,如setheading(towards(0, 0))可以设置画笔指向原点。
- pos(): 返回画笔当前的坐标。鼠标移动一段时间后可以print()打印此函数获取鼠标位置。
- heading(): 返回画笔当前的方向。
画笔操作
- circle(radius[, extent=arc]): 画一个圆,传入圆的半径,根据画笔的方向控制圆心的位置,圆心与画笔的方向垂直。传入弧度值可以画出指定弧度的圆弧。
- left(angle): 画笔左转,传入任意一个目标角度。
- right(angle): 画笔右转。
- forward(distance): 画笔前进一段距离。
- backward(distance): 画笔后退一段距离。
- goto(x, y): 移动画笔到指定坐标。
颜色填充
- begin_fill(): 开始填充。
- fillcolor(color): 设置图形中填充的颜色。
- end_fill(): 结束填充。
具体画图时,调整画笔的起点,设置不同的转角度数和不同的前进长度,可以得到不同形状的弧线(其实是折线),用弧线构成完整的图形。
部分代码
# coding=utf-8
"""
作者:小斌哥ge
公众号: 小斌哥ge
微信:XiaoBinnGe-
发表时间:2024年1月
"""
from turtle import *
import time
def set_start(x, y, w=1, c='black'):
penup()
setx(x)
sety(y)
setheading(towards(0, 0))
width(w)
pencolor(c)
pendown()
speed(0)
def left_rotate(times, angle, length):
for i in range(times):
left(angle)
forward(length)
def right_rotate(times, angle, length):
for i in range(times):
right(angle)
forward(length)
def fill_color_patch(x, y, c='black'):
set_start(x, y, 1, c=c)
begin_fill()
set_start(x, y, 1, c=c)
forward(1)
fillcolor(c)
end_fill()
def draw_tail():
"""尾巴"""
fill_color_patch(243, 118, c='black')
begin_fill()
set_start(243, 118, w=2, c='black')
right_rotate(1, 145, 10)
left_rotate(3, 15, 8)
right_rotate(1, 150, 5)
left_rotate(2, 5, 5)
left_rotate(1, 70, 3)
left_rotate(3, 12, 5)
left_rotate(1, 15, 8)
right_rotate(3, 13, 9)
right_rotate(2, 10, 5)
left_rotate(3, 15, 10)
right_rotate(1, 140, 1)
right_rotate(3, 11, 6)
right_rotate(3, 10, 8)
left_rotate(3, 15, 9)
left_rotate(1, 155, 5)
right_rotate(2, 12, 12)
right_rotate(3, 16, 11)
left_rotate(3, 15, 9)
right_rotate(3, 6, 12)
right_rotate(1, 140, 5)
right_rotate(3, 5, 12)
right_rotate(3, 10, 5)
left_rotate(2, 6, 13)
left_rotate(3, 17, 6)
left_rotate(1, 150, 5)
right_rotate(4, 17, 12)
left_rotate(2, 17, 10)
left_rotate(2, 16, 10)
left_rotate(1, 3, 5)
right_rotate(3, 7, 8.5)
right_rotate(1, 150, 6)
left_rotate(3, 6, 4)
right_rotate(3, 7, 10)
right_rotate(3, 11, 5)
right_rotate(6, 4, 3)
left_rotate(2, 4, 12)
left_rotate(1, 20, 6)
left_rotate(2, 7, 7)
left_rotate(1, 155, 5)
right_rotate(5, 7, 5)
left_rotate(2, 7, 8)
left_rotate(4, 6.5, 5)
right_rotate(5, 7, 6.5)
right_rotate(1, 155, 5)
left_rotate(3, 11, 6)
right_rotate(3, 5.5, 10)
right_rotate(3, 9, 5)
right_rotate(6, 4, 4)
left_rotate(2, 4, 6)
left_rotate(2, 15, 2)
left_rotate(1, 90, 2)
left_rotate(2, 15, 2)
left_rotate(4, 7, 3)
right_rotate(5, 3, 5)
left_rotate(3, 3, 5)
left_rotate(4, 9, 5)
right_rotate(1, 155, 5)
right_rotate(3, 11, 10)
right_rotate(4, 10, 5)
left_rotate(3, 9, 6)
left_rotate(3, 2, 5.5)
left_rotate(1, 138, 3)
right_rotate(2, 3, 6)
left_rotate(3, 13, 6)
left_rotate(2, 4, 6)
right_rotate(1, 155, 5)
left_rotate(2, 5, 5)
right_rotate(3, 12, 5)
right_rotate(4, 10, 5)
left_rotate(4, 7, 7)
left_rotate(1, 110, 4)
left_rotate(3, 15, 3)
right_rotate(1, 150, 5)
right_rotate(3, 10, 4)
left_rotate(3, 5, 5)
left_rotate(3, 21, 5)
left_rotate(2, 15, 5)
right_rotate(1, 165, 5)
left_rotate(3, 6, 5)
left_rotate(3, 12, 5)
goto(243, 118)
fillcolor('#F66708')
end_fill()
if __name__ == '__main__':
title('龙腾万里(公众号:小斌哥ge)')
wide = 900
height = 600
screensize(wide, height, '#EDB700')
# screensize(wide, height, '#F5C36B')
setup(wide + 30, height + 30, 250, 50)
shape(name='turtle')
time.sleep(2)
draw_tail()
# draw_body()
# draw_head()
# draw_foot()
# draw_back()
# draw_scale()
# draw_ribbon()
# draw_eye()
set_start(1000, 1000)
done()
代码获取
代码有2800行,可以在下方点击公众号名片关注“ Python碎片 ”,在后台回复关键字“龙腾万里”获取完整代码,有疑问可以扫码加我WX。
这是第四年,希望你每一年都变得越来越好,每年的心愿都能实现,大家相互陪伴,一起前行。明年继续。
声明:转载、二创等使用本文代码,请注明出处。
相关阅读👉
用Python标准库turtle画一头金牛,祝您新年牛气冲天!
用Python标准库turtle画一只老虎,祝您新年虎虎生威,大吉大利!
分享
收藏
点赞
在看
评论