今日得闲,完善一下之前用python画的滑稽笑脸的代码,附计算过程

在这里插入图片描述

现在来补充一下,之前的笑脸画法

首先,我们来引入两个接下来画笑脸需要用到的库

一分析了,首先看下我们的目标图形(在文开始),并对其进行简单的解析


import turtle as t



import math

首先,我们的思路是先画出一个大圆

然后,分别定义画大小嘴唇的,左右眼睛的,左右脸颊的函数

最后,在完成了前期的所有基本结构之后,进行颜色的填充

接下来看代码


def upmouth():

t.left(90)

t.up()

t.fd(25)

t.down()

t.fillcolor("red")

t.begin_fill()

t.left(90)

x = 1

for i in range(180):

t.pencolor("red")

t.fd(3)

t.right(1)

t.end_fill()

--------------------- 

作者:gzh_love_python 

来源:CSDN 

原文:https://blog.csdn.net/gzh_love_python/article/details/88204664


版权声明:本文为博主原创文章,转载请附上博文链接!

这是上嘴唇的代码,前半部分没啥稀奇的,就是那个便利循环

这里的遍历循环的数学原理就是微积分基本思想

接下来画下嘴唇,同样的方法,实验它的各项参数,当然实验之前需要用高中数学进行一定的计算,得出一个比较模糊的数值,随后再进行多次调整。这里说下,用到的公式有,弧长 = 圆心角(弧度制) * 半径, 再根据之前定义的大脸盘子的半径,进行半径的求解,需要用到反三角函数


def down_mouth():

t.fillcolor(“yellow”)

t.begin_fill()

t.right(90 + 80)

for u in range(163):

t.pencolor(“red”)

t.left(1)

t.fd(3)

t.end_fill()

t.up()

t.goto(190, 310)

t.down()

--------------------- 

作者:gzh_love_python 

来源:CSDN 

原文:https://blog.csdn.net/gzh_love_python/article/details/88204664


版权声明:本文为博主原创文章,转载请附上博文链接!

而后,就是画眼睛了,经过观察,不难发现,对于画两只眼睛而言,只需改变turtle的起始位置即可,其他的参数全都一样,所以,对眼睛的上下弧长求解就变得很重要了。经过观察,不难看出,眼睛的主体框架其实是两条圆心角相同,半径不同的弧。而眼睛的边角就是半圆。


def eyes():

t.fillcolor(“white”)

t.begin_fill()

for r in range(100):

t.fd(2)

t.left(1)

t.circle(10, 180)

for r in range(100):

t.fd(2 - (math.pi / 9))

t.right(1)

t.circle(10, 180)

t.end_fill()

t.up()

t.circle(10, 90)

t.right(90)

for r in range(90):

t.fd(2 - (math.pi / 13))

t.left(1)

t.down()

t.fillcolor(“black”)

t.begin_fill()

t.circle(10)

t.end_fill()

--------------------- 

作者:gzh_love_python 

来源:CSDN 

原文:https://blog.csdn.net/gzh_love_python/article/details/88204664


版权声明:本文为博主原创文章,转载请附上博文链接!

接下来就是最后的部分了,画出脸颊,同样是用微积分思想,这里需要强调一下,角度的不断修正,来自于turtle相对于水平线的相对角度,而得出这个角度的方法就是做切线,还是离不开微积分。


def cheek():

t.pensize(2)

t.fillcolor(“pink”)

t.pencolor(“pink”)

t.begin_fill()

for c in range(90):

t.fd(10 / 8)

t.left(1)

t.left(90)

for c in range(90):

t.fd(10 / 8)

t.left(1)

t.end_fill()

--------------------- 

作者:gzh_love_python 

来源:CSDN 

原文:https://blog.csdn.net/gzh_love_python/article/details/88204664


版权声明:本文为博主原创文章,转载请附上博文链接!

最后,就是主体框架了

t.begin_fill() t.circle(200,360+90) t.end_fill() # 画上嘴唇
upmouth() # 画下嘴唇
down_mouth() # 修正角度
t.left(50) t.pencolor(“black”) # 画右眼睛 eyes() # 修正角度
t.right(90)

# 修正坐标

t.up()

t.goto(-10,310)

t.down()

# 画左眼睛

eyes()

# 修正角度

t.right(130)

t.left(45)

# 画右脸颊

t.up()

t.goto(150, 250)

t.down()

cheek()

# 画左脸颊

t.up()

t.left(90)

t.goto(-50,250)

t.down()

cheek()

t.exitonclick()

12345678910111213141516171819202122232425262728

if name == “main”:

main()

--------------------- 

作者:gzh_love_python 

来源:CSDN 

原文:https://blog.csdn.net/gzh_love_python/article/details/88204664


版权声明:本文为博主原创文章,转载请附上博文链接!
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值