草莓熊python turtle绘图代码

Posted 逆境清醒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了草莓熊python turtle绘图代码相关的知识,希望对你有一定的参考价值。

草莓熊python turtle绘图代码

        目 录:

一、草莓熊简介

二、python turtle绘制草莓熊效果图

三、Python 海龟画图主要方法

(1)海龟画图的主要步骤

(2)海龟画图的坐标体系

(3)海龟画图的一些建议

四、海龟画图常用命令

1、初始化

2、画笔属性

3、画笔运动命令

4、 画笔颜色控制命令

5、全局控制命令

五、python turtle绘制草莓熊源代码


一、草莓熊简介

  草莓熊,英文名Lotso,迪士尼公司和皮克斯动画工作室公司于2010年合作推出的动画片《玩具总动员3》(Toy Story3)的反派角色。

(草莓熊简介配图来源于网络《玩具总动员3》,版权属《玩具总动员3》,此处仅作介绍人物绘图前形象介绍用途)

   草莓熊本来拥有一个幸福的家庭:爱他的主人小女孩黛西,粉红色如梦如幻的世界。黛西很爱陪伴她的玩具,尤其是草莓熊,他最受宠爱。黛西和草莓熊整天形影不离,他们是世界上最亲密的孩子和玩具。

   但是,突如其来的变故打破了这看似完满的生活:在一次郊游中,他,被主人不小心遗弃在了荒野(黛西睡着了,被抱上了车,丢下了玩具)。他呼喊,他等待,主人没有回来找他。

   草莓熊不肯放弃,于是他经过苦苦寻找,历尽千辛万苦,跋山涉水翻山越岭回到了主人黛西家,却发现已经太晚了,一切都跟自己想的不一样了,迎接草莓熊的是残酷的血淋淋现实:主人新买了一只草莓熊!他,被另一只草莓熊取代了!(主人黛西怀里抱着新的草莓熊)

  他受到了伤害,性格开始转变,憨厚可爱的外表下一颗心开始阴暗扭曲,他不在是任何人的朋友,变成了阳光托儿所的一个坏老大,控制着幼儿园玩具们的命运。

   草莓熊的变化其实是一种反差,它表面有多凶,内里就有多可怜缺爱,特殊的身世决定了草莓熊特殊的性格。

  纵观整部影片,几乎所有的玩具,都经历过因为被主人遗忘、捐赠而带来的被抛弃的伤害。但是,不管是女牛仔翠丝、弹簧狗、蛋头先生太太,还是牛仔伍迪和他的玩具朋友们,都不曾因此对主人和世界产生憎恨。虽然牛仔伍迪的其他小伙伴们,因为误会主人安迪要抛弃他们而选择离开,却也从来没有想过要以伤害别人的方式,抚平伤痛。草莓熊在面对不幸的时候,做了错误的选择。因此才会有最后并不美好的结局。

   草莓熊的改变说明了一件事:只有爱,才能化解心中的恨。爱、信任、包容、关心、照顾、才能浇灌出善良,才能在困境中走出,获得各自想要的美好!

  草莓熊Lotso看上去是粉红色、毛茸茸的,闻起来是香甜的草莓味,外表可爱。一只柔软、温暖的毛绒玩具,可以充当忠诚可靠的陪伴者,带给人安全感。草莓熊的改变在于他在乎主人却被主人轻易遗忘取代的失落和伤痛。

  人生不如意的事情十有八九,特别是那些不由你做主的事情。求之而不得的无奈,因误会而越走越远的朋友,各种突发的变故。。。。。。遇到伤害时,不要以伤害别人的方式来抚平伤痛,因为那是无效的(草莓熊做坏老大时内心真正开心吗?不,他依旧放不下黛西,依旧忘不了自己被轻易遗忘取代的失落和伤痛。)

  从某个角度讲,我们每个人都会经历和草莓熊一样的变故。怎么选择很重要,如果尽力了,一切还不能如愿,那么请放下,好好珍惜自己,珍惜身边对你好的朋友。如果有未尽的缘分,时间最终会有一个交代。

  把草莓熊当成过去的自己,抱抱他,给过去的自己一个温暖的拥抱。

  丢弃草莓熊它就变坏,爱它它则不离不弃。就算你把我不小心丢弃,不远千里,历尽千辛万苦我依旧会找到你。可爱的草莓熊你想看着他变坏吗?不想,那就不要轻易丢弃它。

  如果你有了你自己喜欢的草莓熊,请陪它到最后。

  一只带有草莓香味的“草莓熊”会祝福你,莓心 莓肺 莓有烦恼,并且生活充满甜甜的🍓味!

二、python turtle绘制草莓熊效果图

  如果你没有草莓熊,没关系,我们一起用python画一只吧。 

  我这次用python turtle绘图画的草莓熊效果图如下,

  如果喜欢,请接着往下看;

  如果不喜欢,请把手(鼠标)往右上角的ⅹ符号移动,点击前请念动咒语:“我已没有烦恼,886!”(皮一下,(*^▽^*))

 三、Python 海龟画图主要方法

  海龟绘图(turtle库)是python的内部模块,使用前导入即可 import turtle 库

  海龟有几个关键属性:方向、位置和画笔属性

(1)海龟画图的主要步骤

  通常我们绘图时

  第一步,导入海龟库和绘图时可能用到的一些库,例如随机函数库random,numpy库等等,具体要看实际情况。

  使用方法:

  import turtle

  import random

  

  第二步,使用setup()设置画布尺寸

  画布(canvas):

  画布就是我们用于绘图的区域, 我们可以设置它的大小和初始位置

  设置画布大小:

  1. turtle.screensize(canvwidth=None, canvheight=None, bg=None)

  参数分别为画布的宽(单位像素), 高, 背景颜色

  turtle.screensize()默认大小(400, 300)

  例如:turtle.screensize(800, 600, “black”)

  2. turtle.setup(width=数值, height=数值, startx=None, starty=None)

  setup()设置窗体大小及位置。

  参数:

  width, height:为整数时, 表示像素;

  width, height:为小数时, 表示占据电脑屏幕的比例

  turtle.setup(width=0.5, height=0.85, startx=None, starty=None)

  turtle.setup(width=0.6, height=0.6)

  (startx, starty): 这一坐标表示 矩形窗口左上角顶点的位置, 如果为空,则窗口位于屏幕中心

  如:turtle.setup(width=800, height=800, startx=100, starty=100)

  第三步,设置画笔

  使用Pen()设定海龟画图对象,即画笔:turtle.Pen()

  t = turtle.Pen()

  使用t来代替turtle.Pen()。一劳永逸的做法,可简化输入代码。

(2)海龟画图的坐标体系

  代码执行后就建立了画布,屏幕中间可以看见海龟 (箭头arrow)

  在海龟绘图中,海龟的起点即画布中央为 (0,0),移动单位是像素 (pixel),海龟的头部是x轴方向,为0度。

    turtle绘图中, 就是使用位置方向描述海龟(画笔)的状态

  想象绘图区有一只机器海龟,起始位置在 x-y 平面的 (0, 0) 点。先执行 import turtle,再执行 turtle.forward(15),它将(在屏幕上)朝所面对的 x 轴正方向前进 15 像素,随着它的移动画出一条线段。再执行 turtle.right(25),它将原地右转 25 度。

  描述海龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向),

  在画图过程中,如果没明确的指定坐标和角度,那此时所有的角度和位置都是相对的(相对于当前海龟的位置和角度)

画月饼常会用到画圆:turtle.circle(radius, extent=None, steps=None)

参数:

  • radius -- 一个数值

  • extent -- 一个数值 (或 None)

  • steps -- 一个整型数 (或 None)

  绘制一个 radius 指定半径的圆。

  圆心在海龟左边 radius 个单位;

  extent 为一个夹角,用来决定绘制圆的一部分。如未指定 extent* 则绘制整个圆。如果 *extent 不是完整圆周,则以当前画笔位置为一个端点绘制圆弧。如果 radius 为正值则朝逆时针方向绘制圆弧,否则朝顺时针方向。

  最终海龟的朝向会依据 extent 的值而改变。

  圆实际是以其内切正多边形来近似表示的,其边的数量由 steps 指定。

  如果未指定边数则会自动确定。此方法也可用来绘制正多边形。

  画一个半径为100的圆形,circle(100),注意画完后圆心位置不在原点。

(3)海龟画图的一些建议

      a、使用海龟绘图可以编写重复执行简单动作的程序画出精细复杂的形状。

from turtle import *

speed(0)

color('blue', '#87CEFA')

begin_fill()

while True:

    forward(200)

    left(170)

    if abs(pos()) < 1:

        break

end_fill()

将文字排成圆形:

import turtle as t

text="祝大家中秋节快乐"

for i in text:

    t.write(i,align="center",font=("黑体",20,"normal"))

    t.right(360/len(text))

    t.penup()   

    t.forward(40)

t.hideturtle()

t.done()

  b、隐藏画笔;设置速度,可以画得更快些;

  c、海龟绘图时的颜色代码可以参考下面链接

色彩颜色对照表系列(1~5)300种颜色,(16进制、RGB、CMYK、HSV、中英文名)

    挑选出自己喜欢的颜色,拷贝相应的颜色代码值放入海龟颜色设置中。

四、海龟画图常用命令

1、初始化

代码命令

作 用

import turtle

导入海龟库

t = turtle.Pen()

从工具箱子获取海龟画笔

turtle.setup()

画布设置(尺寸,距离)

turtle.bgcolor("black")

画布背景色(例如黑色)

turtle.title(title标题)   设置画布标题

screensize( )  

设置画布窗口的宽度、高度和背昱颜色

2、画笔属性

代码命令

作 用

turtle.pensize(width数字值)

画笔粗细,设置画笔线条的粗细为指定大小

turtle.color('画笔颜色')

画笔颜色   字符串"green", "red" 或者 RGB 3元组

turtle.speed(0)

设置画笔移动速度

画笔绘制的速度范围[0,10]整数,数字越大画笔速度越慢。值1~9,0最快t.speed(0)

turtle.hideturtle()

隐藏海龟图标(隐藏画笔箭头)

turtle.showturtle()

显示海龟图标(显示画笔箭头)

3、画笔运动命令

代码命令

作 用

turtle.forward()

fd(distance)         

向前移动,沿着当前方向前进指定距离

bk(distance)

向后移动,沿着当前相反方向后退指定距离

turtle.right(旋转角度)

画笔右转,turtle. right (90)海龟方向向右转90°

turtle.left(旋转角度)

画笔左转,turtle.left(90)海龟方向向左转90°

turtle.penup()

提笔,抬起画笔

turtle.pendown()

落笔,落下画笔

turtle.goto(x,y横,纵)

控制画笔移动到指定位置,海龟移动到(x,y)位置

turtle.setx(x)

海龟的x坐标移动到指定位置,纵坐标不变

turtle.sety(y)

海龟的y坐标移动到指定位置,横坐标不变

turtle.circle(指定半径, 弧度)

画圆,绘制一个指定半径和角度e的圆或弧线

turtle.dot(半径,color)

画一个圆点(实心)绘制一个指定半径和颜色的圆点

turtle.setheading(angle指向角度)

turtle.seth(angle)

设置当前朝向为angle角度。画笔的指向,右是0,逆时针0-360递增

turtle.home()

设置当前画笔位置为原点,朝向东(默认值)

4、 画笔颜色控制命令

代码命令

作 用

turtle.fillcolor('颜色')

设置 填充颜色

turtle.color(color1, color2)

设置 画笔颜色为color1,填充颜色为color2

可以使用颜色名称或十六进制RGB代码

turtle.begin_fill()

开始填充颜色

turtle.end_fill()

填充完成,结束填充

turtle. pencolor(‘颜色’)

设置画笔颜色

turtle. filling()

返回填充的状态,True为填充。False为未填充

5、全局控制命令

代码命令

作 用

turtle.clear()

清空turtle窗口,但是turtle的位置和状态不会改变(当前窗口清空,当前画笔位置不改变)

turtle.reset()

清空turtle窗口,重置turtle状态为起始状态(当前窗口清空,画笔位置等状态为初始时的默认值)

turtle.undo()

撤销上一个turtle动作(撤销画笔的最后一步动作)

turtle.isvisible()

返回当前turtle是否可见

turtle.done()

关闭画笔,结束绘制,但画面保留

              

代码命令

作 用

t.write("文本" ,align="center",font=("黑体",20,"normal"))

写文本,可指定显示字体,字体大小等align(可选):left,right,center;font(可选):字体名称,字体大小,字体类型(normal,bold,italic)

五、python turtle绘制草莓熊源代码

完整代码如下:

#-*- coding: UTF-8 -*-
import turtle as t

"""
=================================================
@Project ->Adversity Awake 草莓熊系列
@类别     : 草莓熊->草莓熊之2
@Author  : 逆境清醒
@Date    : 2022/9/30 3:02
@Desc    :https://blog.csdn.net/weixin_69553582
=================================================

"""
# 设置背景颜色,窗口位置以及大小

t.colormode(255)# 颜色模式
t.speed(0)
t.screensize(850,760,"white")#画布大小背景颜色
t.setup(width=850, height=760,startx=None, starty=None) #绘图窗口的大小和起始坐标
#t.bgpic("di_800.gif")
t.title("逆境清醒草莓熊!")#设置绘图窗口的标题
t.resizemode('noresize')  #大小调整模式:auto,user,noresize
t.tracer(1)   



scolor=["#E6005C","#00BFFF","#538a30","#F28500"]   # 深色列表
qcolor=["#FF007F","#87CEFA","#7fbc2b","#FFA500"]  # 浅色列表
blsize=80                     # blsize值,blsize,是大等腰直角三角形的斜边风车等比例缩放
bs=2**0.5/2*blsize             # bs是直角边,2**0.5 表示数学中的“根号2”
# zjsjxxb是小等腰直角三角形的斜边,zjb是直角边
zjb=blsize/2 # zjb是小等腰直角三角形的直角边
zjsjxxb=2**0.5 *zjb  # zjsjxxb是小等腰直角三角形的斜边
length=1.7*blsize # 风车杆长
width=2/15*blsize # 风车杆宽
 
def fongche():#风车 
    t.penup()
    t.goto(-205,-42)
    t.begin_fill()
    t.pensize(4)
    t.pencolor("#321320")
    t.fillcolor("#D2B48C")
    t.circle(15)
    t.end_fill()
    t.penup()
    t.goto(-220,80)
    t.pendown()
    t.setheading(-90)
    t.pensize(width)
    t.pencolor("#5f4a1d")
    t.forward(length)
    t.pensize(2)
    t.backward(length)
    t.setheading(90)
    
    for i in range(4):
        # 小等腰直角三角形
        t.color(scolor[i])  # 遍历深色列表scolor
        t.begin_fill()
        t.forward(zjb)
        t.left(90)
        t.forward(zjb)
        t.left(135)
        t.forward(zjsjxxb)
        t.end_fill()
        #t.pencolor(scolor[i])
        #t.pensize(4)
 
        # 大等腰直角三角形
        t.color(qcolor[i])  # 遍历浅色列表qcolor
        t.begin_fill()
        t.backward(zjsjxxb)
        t.right(90)
        t.forward(bs)
        t.left(135)
        t.forward(blsize)
        t.end_fill()
        #t.pencolor(scolor[i])
        #t.pensize(4)

        # 旋转180度后,画下一片风车叶片
        t.right(180)
        t.penup()

mling_circle_list = iter([  # 每段弧线(半径,弧角度数)
    (18, 360), (14, 360), (10, 360), (6, 360),
    (18, 360), (14, 360), (10, 360), (6, 360),
])


def mling_draw_eyeball(zb1,zb2,zb3,zb4):  
    for zb, color_ in zip([zb1,zb2,zb3,zb4], ['#ffffff', '#482d08', '#000000', '#ffffff']):
        t.penup()
        t.goto(*zb)
        t.pendown()
        t.begin_fill()
        t.setheading(0)
        t.color(color_)
        t.pencolor('#000000')
        t.pensize(2)
        t.circle(*next(mling_circle_list))
        t.end_fill()

t.penup()
p = t.home()
t.pencolor("#321320")
t.fillcolor("#cb3263")
t.pensize(4)
t.goto(120,110)
t.pendown()
t.begin_fill()
t.goto(200,0)
t.left(-40)
t.circle(-110,105)
t.left(75)
t.goto(170,-110)
t.left(-80)
t.circle(30,40)
t.left(60)
t.circle(-80,70)
t.left(83)
t.circle(-35,95)
t.goto(60,-270)
t.left(-80)
t.circle(-65,70)
t.left(63)
t.circle(35,30)
t.left(130)
t.circle(-65,70)
t.goto(-120,-270)
t.left(-110)
t.circle(-35,80)
t.left(83)
t.circle(-80,50)
t.left(60)
t.circle(-80,60)
t.left(60)
t.circle(30,30)
t.left(20)
t.circle(80,80)
t.left(-105)
t.circle(-70,150)
t.left(50)
t.circle(-170,50)
t.goto(120,110)
#Author:Adversity Awake
t.end_fill()
t.penup()
p = t.home()
t.pencolor("#321320")
t.fillcolor("#ffffff")
t.pensize(4)
t.goto(90,60)
t.pendown()
t.begin_fill()
t.right(30)
t.circle(-130,360)
t.end_fill()
t.penup()
p = t.home()
t.pencolor("#321320")
t.fillcolor("#f3d2ad")
t.pensize(4)
t.goto(-250,-55)
t.seth(0)
t.pendown()
t.begin_fill()
t.right(-55)
t.circle(-45,270)
t.goto(-220,-75)
t.goto(-250,-55)
t.end_fill()

fongche()

t.penup()
p = t.home()
t.pencolor("#321320")
t.fillcolor("#f3d2ad")
t.pensize(4)
t.goto(185,-90)
t.pendown()
t.begin_fill()
t.right(140)
t.circle(43,95)
t.goto(185,-90)
t.end_fill()
t.penup()
t.seth(0)
t.pencolor('#321320')
t.fillcolor('#cb3263')
t.pensize(4)
t.begin_fill()
t.goto(21,0)
t.pendown()
t.circle(123,134)
t.left(-90)
t.circle(40,185)
t.left(-60)
t.circle(120,60)
t.left(-90)
t.circle(50,200)
t.left(-90)
t.circle(100,100)
t.left(-12)
t.circle(100,40)
t.goto(21,0)
t.penup()
#Author:Adversity Awake
t.end_fill()
t.penup()
t.goto(0, 0)
t.seth(0)
t.pencolor('#321320')
t.fillcolor('#ffffff')
t.pensize(4)
t.begin_fill()
t.goto(-70,210)
t.left(140)
t.pendown()
t.circle(30,200)
t.goto(-70,210)
t.penup()
t.end_fill()
t.penup()
t.goto(0, 0)
t.seth(0)
t.pencolor('#321320')
t.fillcolor('#ffffff')
t.pensize(4)
t.begin_fill()
t.goto(90,220)
t.left(45)
t.pendown()
t.circle(22,200)
t.goto(90,220)
t.penup()
t.end_fill()
t.penup()
t.goto(0, 0)
t.seth(0)
t.pencolor('#321320')
t.fillcolor('#ffffff')
t.pensize(4)
t.begin_fill()
t.left(-98)
t.left(90)
t.goto(18,10)
t.pendown()
t.circle(100,134)
t.left(10)
t.circle(110,30)
t.left(10)
t.circle(160,40)
t.circle(85,40)
t.left(2)
t.circle(95,40)
t.left(5)
t.circle(95,60)
t.goto(18,10)
t.penup()
t.end_fill()
t.penup()
p = t.home()
t.pencolor("#321320")
t.fillcolor("#8f3a52")
t.pensize(2)
t.goto(25,240)
t.pendown()
t.begin_fill()
t.goto(60,235)
t.left(30)
t.fd(8)
t.left(90)
t.fd(22)
t.circle(90, 8)
t.left(20)
t.circle(90, 8)
t.left(20)
t.circle(90, 20)
t.left(40)
t.circle(50, 20)
t.end_fill()
t.penup()
t.pensize(12)
t.goto(-2,250)
t.pencolor("#4D1F00")
t.fillcolor("#4D1F00")
t.pendown()
t.goto(60,240)
t.end_fill()
t.penup()
p = t.home()
t.pencolor("#321320")
t.fillcolor("#8f3a52")
t.pensize(2)
t.goto(-55,193)
t.pendown()
t.begin_fill()
t.left(65)
t.circle(-90, 25)
t.goto(-10,230)
t.left(30)
t.fd(8)
t.left(90)
t.fd(18)
t.circle(90, 8)
t.left(20)
t.circle(90, 10)
t.left(40)
t.circle(90, 30)
t.left(30)
t.circle(40, 20)
t.penup()
t.end_fill()
t.pensize(12)
t.goto(-63,195)
t.pencolor("#4D1F00")
t.fillcolor("#4D1F00")
t.pendown()
t.left(100)
t.circle(-85,45)
t.end_fill()

mling_draw_eyeball((-20,180), (-23,185), (-25,188), (-30,200)) 
mling_draw_eyeball((30, 193), (27, 200), (25,203), (20,213)) 

t.penup()
p = t.home()
t.pencolor("#321320")
t.fillcolor("#8f3a52")
t.pensize(3)
t.goto(25,105)
p = t.pos()
t.pendown()
t.begin_fill()
t.circle(85, 65)
t.left(16)
t.circle(30, 55)
t.left(20)
t.circle(145, 58)
t.left(8)
t.circle(20, 55)
t.left(8)
t.circle(50, 65)
t.left(-5)
t.circle(310, 8)
t.end_fill()
t.penup()
t.goto(0, 0)
t.seth(0)
t.pencolor('#321320')
t.fillcolor('#a93e54')
t.pensize(3)
t.begin_fill()
t.left(-20)
t.goto(9,66)
t.pendown()
t.circle(68,40)
t.left(10)
t.circle(65,40)
t.left(160)
t.circle(-75,85)
t.left(158)
t.circle(48,37)
t.goto(9,66)
t.penup()
t.end_fill()
t.color('#321320')
t.penup()
t.goto(260,60)
t.pendown()
t.write("愿\\n你\\n没\\n有\\n烦\\n恼\\n",align="center",font=("黑体",20,"normal"))
t.penup()
t.goto(290,183)
t.pendown()
t.write("逆\\n境\\n清\\n醒\\n",align="center",font=("黑体",10,"normal"))
t.hideturtle()
t.done()


  如果你有自己喜欢的底图,可以将第20行的 “#t.bgpic("di_800.gif") ”这句里的图片文件名替换成你自己的图片文件名,记得将注释的#符号取消。

  本例草莓熊绘制窗口大小是850*760,绘制测试环境是python 3.10。 

  因为绘制匆忙,代码没时间优化,有兴趣的自己优化一下。

  草莓熊手中的风车代码参考了Python Turtle绘图[难度2星]:旋转风车(静态/动态,单色/多色)_带中小学生玩转Python的博客-CSDN博客_python绘制风车

  不喜欢风车的,可以将此处风车代码换成其他的,例如让草莓熊手持玫瑰花,也是个不错的构思。

以上是关于草莓熊python turtle绘图代码的主要内容,如果未能解决你的问题,请参考以下文章

题解——草莓

草莓大王PK人工智能,谁是C位?

水果识别基于matlab GUI灰度二值化草莓识别含Matlab源码 653期

基于K-means聚类算法的草莓灌溉策略研究

Fastapi + 草莓 GraphQL

解决方案环境监控技术提升温室种植草莓的口感产量品质