用Python画一条祥龙,祝您新年龙腾万里

Python 碎片

共 8871字,需浏览 18分钟

 · 2024-04-10

作者大部分时间周更,为了不错过精彩内容,请点击上方“ Python碎片 ”,“ 星标 ”公众号

      
        



   龙年到了,祝大家新年龙行龘龘,龙腾万里!

从2021年开始,我每年都用Python画一幅当年生肖的图。

用Python标准库turtle画一头金牛,祝您新年牛气冲天!

用Python标准库turtle画一只老虎,祝您新年虎虎生威,大吉大利!

用Python画一只小兔子,祝您新年前途似锦!大展宏图!

今年继续画一条祥龙,为大家送上祝福。

绘图过程录制成了如下视频,点击视频可以先看到效果。

视频展示




绘图结果



0c7725982f949d41cb9e79a7dc3e20bb.webp


实现方法介绍



本文的绘图工具使用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(00))
    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(243118, c='black')
    begin_fill()
    set_start(243118, w=2, c='black')
    right_rotate(114510)
    left_rotate(3158)
    right_rotate(11505)
    left_rotate(255)
    left_rotate(1703)
    left_rotate(3125)
    left_rotate(1158)
    right_rotate(3139)
    right_rotate(2105)
    left_rotate(31510)
    right_rotate(11401)
    right_rotate(3116)
    right_rotate(3108)
    left_rotate(3159)
    left_rotate(11555)
    right_rotate(21212)
    right_rotate(31611)
    left_rotate(3159)
    right_rotate(3612)
    right_rotate(11405)
    right_rotate(3512)
    right_rotate(3105)
    left_rotate(2613)
    left_rotate(3176)
    left_rotate(11505)
    right_rotate(41712)
    left_rotate(21710)
    left_rotate(21610)
    left_rotate(135)
    right_rotate(378.5)
    right_rotate(11506)
    left_rotate(364)
    right_rotate(3710)
    right_rotate(3115)
    right_rotate(643)
    left_rotate(2412)
    left_rotate(1206)
    left_rotate(277)
    left_rotate(11555)
    right_rotate(575)
    left_rotate(278)
    left_rotate(46.55)
    right_rotate(576.5)
    right_rotate(11555)
    left_rotate(3116)
    right_rotate(35.510)
    right_rotate(395)
    right_rotate(644)
    left_rotate(246)
    left_rotate(2152)
    left_rotate(1902)
    left_rotate(2152)
    left_rotate(473)
    right_rotate(535)
    left_rotate(335)
    left_rotate(495)
    right_rotate(11555)
    right_rotate(31110)
    right_rotate(4105)
    left_rotate(396)
    left_rotate(325.5)
    left_rotate(11383)
    right_rotate(236)
    left_rotate(3136)
    left_rotate(246)
    right_rotate(11555)
    left_rotate(255)
    right_rotate(3125)
    right_rotate(4105)
    left_rotate(477)
    left_rotate(11104)
    left_rotate(3153)
    right_rotate(11505)
    right_rotate(3104)
    left_rotate(355)
    left_rotate(3215)
    left_rotate(2155)
    right_rotate(11655)
    left_rotate(365)
    left_rotate(3125)
    goto(243118)
    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 + 3025050)
    shape(name='turtle')
    time.sleep(2)
    draw_tail()
    # draw_body()
    # draw_head()
    # draw_foot()
    # draw_back()
    # draw_scale()
    # draw_ribbon()
    # draw_eye()
    set_start(10001000)
    done()


代码获取


代码有2800行,可以在下方点击公众号名片关注“ Python碎片 ”,在后台回复关键字“龙腾万里”获取完整代码,有疑问可以扫码加我WX。

这是第四年,希望你每一年都变得越来越好,每年的心愿都能实现,大家相互陪伴,一起前行。明年继续。

声明:转载、二创等使用本文代码,请注明出处。


相关阅读👉

用Python标准库turtle画一头金牛,祝您新年牛气冲天!

用Python标准库turtle画一只老虎,祝您新年虎虎生威,大吉大利!

用Python画一只小兔子,祝您新年前途似锦!大展宏图!


    
      

分享

收藏

点赞

在看

浏览 6
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报