今日得閒,完善一下之前用python畫的滑稽笑臉的程式碼,附計算過程

gzh_love_python發表於2019-03-26

在這裡插入圖片描述

現在來補充一下,之前的笑臉畫法

首先,我們來引入兩個接下來畫笑臉需要用到的庫

一分析了,首先看下我們的目標圖形(在文開始),並對其進行簡單的解析


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


版權宣告:本文為博主原創文章,轉載請附上博文連結!

相關文章