• 一日一技:用Python绘画有多好玩


    前言

    小编把之前发过的好玩的有趣的Python绘画结果总结起来发给大家,可以在各种节日跟心爱的那个TA来个浪漫表白哦~喜欢就收藏下来吧,多多支持哦~

    https://docs.qq.com/doc/DT1ZIUFJmU0N1T0Rt

    1、樱花树

    今天刷漫画的时候看到那个樱花树开的真是太好看了,突然就想画个樱花树,然后趁着心情好就把它解析出来,嘿嘿是真的还蛮好看的,而且一个代码可以随机画出多种样式的。

    樱花原产北半球温带环喜马拉雅山地区,在世界各地都有生长,主要在日本国生长。花每枝3到5朵,成伞状花序,花瓣先端缺刻,花色多为白色、粉红色。花常于3月与叶同放或叶后开花,随季节变化,樱花花色幽香艳丽,常用于园林观赏。樱花可分单瓣和复瓣两类,单瓣类能开花结果,复瓣类多半不结果。

    Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。

    Turtle库是Python语言中一个很流行的绘制图像的函数库。

    想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制。

    (一)绘制画幕

    首先绘制画幕,命令说明如下:

    1.screensize(width, height, bg=color):设置画幕大小及颜色

    2.setup(p1, p2):设置画幕大小,当 p1、p2 为小数时表示屏幕占比;当 p1、p2 为整数时表示像素

    3.tracer(speed):设置绘制速度,speed越大表示绘制速度越快

    1. def get_screen(width, height, color, speed):
    2. # 创建画幕
    3. screen_obj = turtle.Screen()
    4. # 画布大小:(width, height),颜色:color
    5. screen_obj.screensize(width, height, bg=color)
    6. screen_obj.setup(1.0, 1.0)
    7. # speed倍加速
    8. screen_obj.tracer(speed)
    9. return screen_obj

    (二)绘制落花

    在确定落花数量的情况下,我们首先要评估落花的范围,这里通过两句语句来约束落花的范围(落花数量越多,当然地落花范围也就越大):

    1. # 有正有负就可以让画笔往二个方向走
    2. x = flower - 4 * flower * random()
    3. # 花瓣整体宽度(-10, 10)
    4. y = 10 - 20 * random()

    然后我们来讲讲 turtle 常用的几个命令吧:

    首先,我们得明确,对于 turtle 画布来说,其为一个 xOy 的平面,画布中心为原点 O ;对于 turtle 画笔来说,其有一个初始方向,指向 x 轴正方向。

    1.penup():起笔(可以想象成画画的时候沾墨之后提笔)

    2.forward():向前移动

    3.backward():向后移动

    4.left(degree):逆时针旋转 degree 度

    5.right(degree):顺时针旋转 degree 度

    6.pendown():落笔

    7.pencolor(color):笔墨颜色为 color

    8.circle(r):画一个半径为 r 的圆

    代码如下:

    1. def draw_petal(turtle_obj, flower):
    2. # 绘制掉落的花瓣
    3. for i in range(int(flower / 2)):
    4. # 有正有负就可以让画笔往二个方向走
    5. x = flower - 2 * flower * random()
    6. # 花瓣整体宽度(-10, 10)
    7. y = 10 - 20 * random()
    8. # 提笔,向前y,左转90,走x,落笔
    9. turtle_obj.penup()
    10. turtle_obj.forward(y)
    11. turtle_obj.left(90)
    12. turtle_obj.forward(x)
    13. turtle_obj.pendown()
    14. # 珊瑚色
    15. turtle_obj.pencolor("lightcoral")
    16. # 画圆
    17. turtle_obj.circle(1)
    18. # 回到起点
    19. # 提笔,后退x,右转90,后退y,落笔
    20. turtle_obj.penup()
    21. turtle_obj.backward(x)
    22. turtle_obj.right(90)
    23. turtle_obj.backward(y)
    24. turtle_obj.pendown()

    (三)绘制树枝与花瓣

    读者会发现,在 drwa_tree 方法中,又出现了两次 drwa_tree 方法,这是一个递归的方法,可以简单理解为一棵树最下面的树枝最少且最粗,越往上树枝数量增加但是变细了。

    1. def draw_tree(turtle_obj, branch, tree_color):
    2. # 设置一个最小分支长度
    3. min_branch = 4
    4. if branch > min_branch:
    5. if branch < 8:
    6. # 以0.5的概率,向左、右分支
    7. if randint(0, 1) == 0:
    8. # 左为白色
    9. turtle_obj.pencolor("snow")
    10. else:
    11. # 右为珊瑚色
    12. turtle_obj.pencolor("lightcoral")
    13. # 枝干
    14. turtle_obj.pensize(branch / 2)
    15. elif 8 <= branch <= 16:
    16. # 以0.33的概率,分为左、中、右分支
    17. if randint(0, 2) == 0:
    18. # 左为白色
    19. turtle_obj.pencolor("snow")
    20. else:
    21. # 中、右为珊瑚色
    22. turtle_obj.pencolor("lightcoral")
    23. # 树枝
    24. turtle_obj.pensize(branch / 4)
    25. else:
    26. # 褐色
    27. turtle_obj.pencolor(tree_color)
    28. # 细枝
    29. turtle_obj.pensize(branch / 10)
    30. # 最开始的树干长度
    31. turtle_obj.forward(branch)
    32. # 随机度数因子
    33. a = 1.5 * random()
    34. # 顺时针旋转随机角度(0~30度)
    35. turtle_obj.right(20 * a)
    36. # 随机长度因子
    37. b = 1.5 * random()
    38. # 往右画,直到画不动为止
    39. draw_tree(turtle_obj, branch - 10 * b, tree_color)
    40. # 左转随机角度
    41. turtle_obj.left(40 * a)
    42. # 往左画,直到画不动位置
    43. draw_tree(turtle_obj, branch - 10 * b, tree_color)
    44. # 右转一定角度
    45. turtle_obj.right(20 * a)
    46. # 提笔
    47. turtle_obj.penup()
    48. # 递归结束回到起点
    49. turtle_obj.backward(branch)
    50. turtle_obj.pendown()

    (四)绘制多棵树

    这部分代码的前半部分是用来约束树根的位置的,为了使树可以在图像中显示地较为完成,较大的树根应该更靠近于画幕底端,且不能太靠近两边,其余部分代码就很容易理解了。

    1. def trees(tree_num):
    2. # 颜色
    3. color = ['brown', 'tan', 'black']
    4. for j in range(tree_num):
    5. # 树干颜色
    6. tree_color = color[randint(0, len(color) - 1)]
    7. # 画笔大小
    8. pensize = randint(2, 5)
    9. # 前进像素
    10. forward = ((-1) ** pensize) * pensize * randint(20, 50)
    11. # 后退像素
    12. if pensize <= 3:
    13. backward = ((-1) ** pensize) * (5 - pensize) * randint(10, 15)
    14. else:
    15. backward = pensize * randint(45, 50)
    16. # 创建画笔
    17. turtle_obj = turtle.Turtle()
    18. # 画笔粗细
    19. turtle_obj.pensize(pensize)
    20. # 提笔,向前forward,左转90,backward,落笔
    21. turtle_obj.penup()
    22. turtle_obj.forward(forward)
    23. turtle_obj.left(90)
    24. turtle_obj.backward(backward)
    25. turtle_obj.pendown()
    26. # 画笔颜色:褐色
    27. turtle_obj.pencolor(tree_color)
    28. # 枝干粗细
    29. branch = pensize * 15
    30. # 落花数
    31. flowers = branch
    32. # 第j棵树
    33. draw_tree(turtle_obj, branch, tree_color)
    34. # 花瓣
    35. draw_petal(turtle_obj, flowers)

    二、效果

    整体效果还是挺美的。

    2、皮卡丘

    相信大家都不会拒绝一只会皮卡皮卡!皮卡丘~的小可爱吧, 小时候是不是都幻想着身边有一只皮卡丘呢?

    https://docs.qq.com/doc/DT1ZIUFJmU0N1T0Rt

    正文:

    今天就为大家分享用python画一只可爱的皮卡丘实例,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧,让我们愉快地开始吧~

     上代码:

    1. #上嘴唇
    2. color("black","#FFD624")
    3. penup()
    4. goto(-168, 65)
    5. pendown()
    6. begin_fill()
    7. setheading(-25)
    8. for i in range(2):
    9. setheading(-25)
    10. circle(35, 70)
    11. end_fill()
    12. #嘴中第二个阴影部分
    13. color("#AB1945", "#AB1945")
    14. penup()
    15. goto(-142, 45)
    16. pendown()
    17. begin_fill()
    18. setheading(40)
    19. circle(-33, 70)
    20. goto(-104,48.3)
    21. penup()
    22. goto(-108,33)
    23. pendown()
    24. setheading(155)
    25. circle(25, 70)
    26. end_fill()
    27. # 左眼
    28. t.pu()
    29. t.color("black")
    30. t.setpos(t.xcor()-40,t.ycor()+90)
    31. t.pd()
    32. t.circle(5)
    33. t.pu()
    34. t.setpos(t.xcor()+5,t.ycor()+10)
    35. t.pd()
    36. t.begin_fill()
    37. t.seth(190)
    38. t.circle(15, 130)
    39. t.seth(310)
    40. t.circle(10, 15)
    41. t.seth(0)
    42. t.circle(17, 133)
    43. t.seth(90)
    44. t.circle(10, 15)
    45. t.end_fill()
    46. t.pu()
    47. t.setpos(t.xcor()+2,t.ycor()-15)
    48. t.pd()
    49. t.color("white")
    50. t.begin_fill()
    51. t.circle(5)
    52. t.end_fill()
    53. # 右眼
    54. t.pu()
    55. t.setpos(t.xcor()+85,t.ycor()+15)
    56. t.pd()
    57. t.color("black")
    58. t.circle(5)
    59. t.pu()
    60. t.setpos(t.xcor()+5,t.ycor()+10)
    61. t.pd()
    62. t.begin_fill()
    63. t.seth(190)
    64. t.circle(20, 130)
    65. t.seth(310)
    66. t.circle(10, 15)
    67. t.seth(0)
    68. t.circle(22, 133)
    69. t.seth(90)
    70. t.circle(13, 15)
    71. t.end_fill()
    72. t.pu()
    73. t.setpos(t.xcor()-7,t.ycor()-15)
    74. t.pd()
    75. t.color("white")
    76. t.begin_fill()
    77. t.circle(7)
    78. t.end_fill()

     结果展示:

     3、爱心发射

    都说程序员不浪漫,上次看到一个程序员小哥给自己老婆开发了一个专属的APP。其实程序员还有更多美好的事情可以做,比如,给你喜欢的妹纸,用代码的方式去表白(当然可能还有一些前戏啥的,自己结合实际场景再渲染下)

    直接用实力告诉女朋友,我也是浪漫的!

    直接上代码:

    1. #!/usr/bin/env python
    2. # -*- coding:utf-8 -*-
    3. import turtle
    4. import time
    5. # 画心形圆弧
    6. def hart_arc():
    7. for i in range(200):
    8. turtle.right(1)
    9. turtle.forward(2)
    10. def move_pen_position(x, y):
    11. turtle.hideturtle() # 隐藏画笔(先)
    12. turtle.up() # 提笔
    13. turtle.goto(x, y) # 移动画笔到指定起始坐标(窗口中心为0,0)
    14. turtle.down() # 下笔
    15. turtle.showturtle() # 显示画笔
    16. # 初始化
    17. turtle.setup(width=800, height=500) # 窗口(画布)大小
    18. turtle.color('red', 'pink') # 画笔颜色
    19. turtle.pensize(3) # 画笔粗细
    20. turtle.speed(1) # 描绘速度
    21. # 初始化画笔起始坐标
    22. move_pen_position(x=0,y=-180) # 移动画笔位置
    23. turtle.left(140) # 向左旋转140度
    24. turtle.begin_fill() # 标记背景填充位置
    25. # 画心形直线( 左下方 )
    26. turtle.forward(224) # 向前移动画笔,长度为224
    27. # 画爱心圆弧
    28. hart_arc() # 左侧圆弧
    29. turtle.left(120) # 调整画笔角度
    30. hart_arc() # 右侧圆弧
    31. # 画心形直线( 右下方 )
    32. turtle.forward(224)
    33. turtle.end_fill() # 标记背景填充结束位置
    34. # 点击窗口关闭程序
    35. window = turtle.Screen()
    36. window.exitonclick()

     结果展示:

     4、清明上河图

    今天闲暇时间,用Python、js制作一张《清明上河图》~

    杠杠滴~

    部分代码:

     

    效果展示:

     5、玫瑰花

    快来学习Python吧,它会给你带来很多乐趣的,现在我们就来画朵玫瑰花吧!

    对于喜欢的女孩子表白的时候都喜欢送玫瑰花,但是玫瑰花又容易凋谢又比较贵,特别是对于学生而言就更加承受不了了,毕竟现在还是用的父母的钱,如果我们用编程写出来玫瑰花用来表白又“省钱”又好看,还耐用......

    祝愿单身早日脱单

    源码:

    1. from turtle import *
    2. import time
    3. setup(1000,800,0,0)
    4. speed(0)
    5. penup()
    6. seth(90)
    7. fd(340)
    8. seth(0)
    9. pendown()
    10. speed(5)
    11. begin_fill()
    12. fillcolor('red')
    13. circle(50,30)
    14. for i in range(10):
    15. fd(1)
    16. left(10)
    17. circle(40,40)
    18. for i in range(6):
    19. fd(1)
    20. left(3)
    21. circle(80,40)
    22. for i in range(20):
    23. fd(0.5)
    24. left(5)
    25. circle(80,45)
    26. for i in range(10):
    27. fd(2)
    28. left(1)
    29. circle(80,25)
    30. for i in range(20):
    31. fd(1)
    32. left(4)
    33. circle(50,50)
    34. time.sleep(0.1)
    35. circle(120,55)
    36. speed(0)
    37. seth(-90)
    38. fd(70)
    39. right(150)
    40. fd(20)
    41. left(140)
    42. circle(140,90)
    43. left(30)
    44. circle(160,100)
    45. left(130)
    46. fd(25)
    47. penup()
    48. right(150)
    49. circle(40,80)
    50. pendown()
    51. left(115)
    52. fd(60)
    53. penup()
    54. left(180)
    55. fd(60)
    56. pendown()
    57. end_fill()
    58. right(120)
    59. circle(-50,50)
    60. circle(-20,90)
    61. speed(1)
    62. fd(75)
    63. speed(0)
    64. circle(90,110)
    65. penup()
    66. left(162)
    67. fd(185)
    68. left(170)
    69. pendown()
    70. circle(200,10)
    71. circle(100,40)
    72. circle(-52,115)
    73. left(20)
    74. circle(100,20)
    75. circle(300,20)
    76. speed(1)
    77. fd(250)
    78. penup()
    79. speed(0)
    80. left(180)
    81. fd(250)
    82. circle(-300,7)
    83. right(80)
    84. circle(200,5)
    85. pendown()
    86. left(60)
    87. begin_fill()
    88. fillcolor('green')
    89. circle(-80,100)
    90. right(90)
    91. fd(10)
    92. left(20)
    93. circle(-63,127)
    94. end_fill()

     结果展示效果图:

     6、圣诞树

    给大家绘画个圣诞树玩玩,收藏起来,圣诞节用得上哦~很漂亮,整理了一下源码,分享给大家(这些我都测试过,确实可以生成喔~)

    源码:

    1. import turtle
    2. screen = turtle.Screen()
    3. screen.setup(375, 700)
    4. circle = turtle.Turtle()
    5. circle.shape('circle')
    6. circle.color('red')
    7. circle.speed('fastest')
    8. circle.up()
    9. square = turtle.Turtle()
    10. square.shape('square')
    11. square.color('green')
    12. square.speed('fastest')
    13. square.up()
    14. circle.goto(0, 280)
    15. circle.stamp()
    16. k = 0
    17. for i in range(1, 13):
    18. y = 30 * i
    19. for j in range(i - k):
    20. x = 30 * j
    21. square.goto(x, -y + 280)
    22. square.stamp()
    23. square.goto(-x, -y + 280)
    24. square.stamp()

     效果展示图:

    后续还有什么喜欢的或者想要的,可以评论区留言哦,我会收集好同步发出来的哦~

    喜欢的小伙伴给个喜欢就赶紧拿走吧,戳一下就可以哦 ↓

    戳一戳腾讯文档-在线文档https://docs.qq.com/doc/DT1ZIUFJmU0N1T0Rt

     

  • 相关阅读:
    App移动测试,这样学最有效
    基于SSM的甜品店商城系统
    docker login harbor http login登录
    [模型部署]:TVM模型部署实战
    前端使用 Konva 实现可视化设计器(5)- 磁贴效果
    一文带你了解动态NAT以及NAPT实验配置
    Docker从0到1的开始【入门篇】
    红细胞膜载近红外荧光染料IR780的壳膜/细胞膜荧光染料CM-Dil标记BMSCs的制备
    Cadence Allegro学习笔记【原理图篇】
    Linux——操作进程状态
  • 原文地址:https://blog.csdn.net/m0_59485658/article/details/125589128