turtle fillcolor_Turtle六一怀旧之画个葫芦娃

网上有好多turtle画图的代码,印象里,至少见过小猪佩奇、多啦A梦等好多个卡通作画源码。由于平时也画过简单的表情、图形啊什么人,就有点飘,想要画一个小时候的卡通人物。想都没多想,就决定来个葫芦娃,毕竟搜了一下,看网上没有源码,适合原创。

于是开始了一个很鸡肋的过程,我发现,这项工程的核心就是画曲线。忽然回想网上流传较多的代码,大部分都是圆啊、线啊这些标准图形,果然还是那些作者们比较鸡贼。

说实话,我也忽然意识到了,这种turtle作图意义不大。但是,自己已经花时间开始了,好歹画完头部吧。就当是一个简笔画的演示?

接下来还是展示这个无聊的过程,就当是致敬经典动画吧。毕竟大朋友小朋友要过节了嘛。

相信你们也发现了,很多细节都没有处理,比如眼睫毛没有加,比如很多该对齐的地方没有对齐。但是,我真的没有耐心再去一点一点修正了哈,我承认,我本来只是想写篇文章来安利一波turtle库的……

接下来,说点有用的吧,毕竟真为了画画,人家各种手绘人员随便一个手写板或者一个PS软件就能分分钟画出栩栩如生的效果。咱们还是来研究下代码吧。

这类绘图,如果真的用程序,就是就是不断的在画曲线。那么问题来了,怎么用计算机画曲线?于是这可能才是本文的重点:

用turtle画曲线的思维

如果是单纯的画圆弧,这个就用circle方法就可以。

如:t.circle(80,30)

画出来的就是一个以起点为圆心,80为半径,30度的一个圆弧。

我们圆弧连接圆弧,确实可以实现这种曲线作图。但是固定的东西,其实有利有弊,弊端在于不够灵活。我们在控制弯的角度的时候,其实是要在中间调整圆心或半径的,并非一次就能画好。

所以就有了另一种更接近画圆本质的画法:

我们用短线加转角的形式,来构造曲线,用角度和短线的步长,来控制曲线的弯曲程度,这个只要控制好这个曲线最初的角度就好。

写成函数,大概如下:

n是短折线的个数,angle是每次转角,step是步长。

注意angle的正负可以控制曲线弯的朝向。

 def cir(n,angle,step):    s=0.6    for i in range(n):        s=s+step        t.lt(angle)        t.fd(s)

比如网上流传的佩奇画法代码中就有:

    for i in range (120):        if 0<=i<30 or 60<=i<90:            a=a+0.08            left(3)#向左转3度            forward(a)#向前走a的步长        else:            a=a-0.08            left(3)            forward(a)

其实电脑画圆,本质上也是以上原理。

这样就可以画曲线了,当然起笔之前,要找一个合适的起始角度

用到的turtle的知识点:

t.seth(90):等同于t.sethead(90)设置起始角度

t.penup():提起画笔

t.pendown():落笔

t.goto(-35,70):换地方画的起点

贴一下代码吧,就重复的画曲线,画曲线。

import turtle as t t.pensize(3)def cir(n,angle,step):    s=0.6    for i in range(n):        s=s+step        t.lt(angle)        t.fd(s)      #头部轮廓开始t.circle(80,30)t.seth(0)cir(60,2,0.04)        t.seth(90)t.circle(90,40)t.seth(120)t.begin_fill()t.fillcolor("black")cir(60,1.8,0.08)cir(60,1.4,0.05)cir(40,1.4,0.04)t.hideturtle() t.seth(120) t.fd(100)t.seth(60) cir(60,-0.8,0.065)t.end_fill()#头部轮廓结束    t.penup()t.goto(30,40)t.pendown()t.seth(20)t.circle(30,25)  t.penup()t.goto(0,60)t.pendown()t.begin_fill()t.fillcolor("red")t.seth(10)t.circle(50,50) t.penup()t.goto(5,60)t.pendown()t.seth(-60)t.circle(15,180) t.end_fill()t.penup()t.goto(10,80)t.pendown()t.seth(45)cir(10,1.8,0.1)t.seth(135)cir(10,-3,0.2)t.penup()#左眼t.goto(-35,70)t.pendown()t.seth(40)cir(30,-0.6,0.03)t.seth(110)cir(20,3,0.03)t.seth(210)cir(30,0.1,0.03)t.seth(-45)cir(20,0.6,0.03)t.penup()t.goto(-30,78)t.pendown()t.begin_fill()t.fillcolor("black")t.circle(6.2,360)t.end_fill()t.pensize(5)t.penup()t.goto(-35,110)t.pendown()t.seth(50)cir(20,-3,0.03)t.penup()t.goto(16,130)t.pendown()t.seth(90)cir(20,-3,0.03)t.pensize(3)t.penup()t.goto(20,110)t.pendown()t.seth(30)cir(30,0.6,0.03)t.seth(-70)cir(22,-0.8,0.03)t.seth(220)cir(30,-0.1,0.02)t.seth(120)cir(20,-2,0.04)t.penup()t.goto(42,110)t.pendown()t.begin_fill()t.fillcolor("black")t.circle(6.1,360)t.end_fill()t.penup()t.goto(-120,120)t.pendown()t.begin_fill()t.fillcolor("#0094ff")t.seth(170)cir(50,3,0.03)t.seth(110)cir(40,-1,0.04)t.end_fill()t.penup()t.goto(-130,120)t.pendown()t.begin_fill()t.fillcolor("#0094ff")t.seth(120)cir(43,5,0.04)t.seth(100)cir(30,-1.2,0.04)t.end_fill()t.penup()t.goto(-150,120)t.pendown()t.begin_fill()t.fillcolor("#0094ff")t.seth(135)t.fd(15)t.left(90)t.fd(5)t.left(90)t.fd(15)t.end_fill()#葫芦叶t.penup()t.goto(-120,65)t.pendown()t.begin_fill()t.fillcolor("green")t.seth(180)t.fd(15)t.left(30)t.fd(35)t.left(45)t.fd(20)t.left(90)t.fd(20)t.left(45)t.fd(35)t.left(45)t.fd(15)t.left(30)t.fd(10)t.end_fill()t.penup()t.goto(-120,60)t.seth(210)t.pendown()t.fd(40)t.penup()t.goto(-130,55)t.seth(240)t.pendown()t.fd(15)t.penup()t.goto(-130,55)t.seth(160)t.pendown()t.fd(15)t.penup()t.goto(-140,45)t.seth(240)t.pendown()t.fd(12)t.penup()t.goto(-140,45)t.seth(160)t.pendown()t.fd(12)t.pensize(1)t.penup()t.pencolor("black")  t.fillcolor("#FFC9A3")t.goto(-65,32)t.pendown()t.begin_fill()t.seth(120)t.fd(30)t.seth(180)cir(20,2,0.03)t.seth(280)cir(35,2.3,0.03)t.end_fill()t.penup()t.pensize(3)t.goto(-87,45)t.pendown()t.fd(10)t.right(90)t.fd(10)t.penup()t.exitonclick()

画完效果大概就这个样子,各位可以优化改进。

d3db94712a9625a20730fbcb2b6dfed9.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值