本来想画兰那罗的,但是太复杂了。还是锅巴好画。
调参真的痛苦。
代码:
# guoba.py
import math
import turtle as tu
def guoba_ellipse(a, b, n=500, x=0, y=0, alpha=360, sangle=0, workangle=360, myflag=False):
"""
绘制椭圆
a:长半轴长度
b:短半轴长度
n:越大越趋近椭圆
x:几何中心x坐标
y:几何中心y坐标
alpha:椭圆旋转的角度
sangle:开始绘制点与椭圆长半轴正方向的夹角(角度)
workangle:绘制一部分椭圆(角度),默认为整个椭圆
myflag:判断是否仅需要调整画笔位置
"""
alpha = (2*math.pi/360)*alpha # 角度制换算弧度值
sangle = (2*math.pi/360)*sangle
workangle = (2*math.pi/360)*workangle
theta = sangle
# 参数方程,旋转的部分按旋转矩阵推导:
start_point = (a*math.cos(theta)*math.cos(alpha) - b*math.sin(theta)*math.sin(alpha) + x,
a*math.cos(theta)*math.sin(alpha) + b*math.sin(theta)*math.cos(alpha) + y)
tu.penup()
tu.setpos(start_point) # 初始位置
if myflag:
return
tu.pendown()
microtheta = 2 * math.pi / n # 将2pi弧度n等分
for i in range(n):
theta = sangle + (i+1)*microtheta # 弧度增加
if (theta-sangle) > workangle:
break
next_point = (a*math.cos(theta)*math.cos(alpha) - b*math.sin(theta)*math.sin(alpha) + x,
a*math.cos(theta)*math.sin(alpha) + b*math.sin(theta)*math.cos(alpha) + y)
tu.setpos(next_point)
tu.penup()
tu.setup(700,700)
tu.speed(10)
tu.delay(0)
tu.pensize(25)
tu.colormode(255)
tu.pencolor((255,193,37))
tu.fillcolor((255,193,37))
tu.begin_fill()
guoba_ellipse(250, 210, 500, 0, -70, 360, -45, 270) # 脸
tu.pendown()
tu.setpos(179, -220)
tu.end_fill()
tu.begin_fill()
guoba_ellipse(75, 70, 500, 160, 150, -30) # 右耳朵
tu.end_fill()
tu.begin_fill()
guoba_ellipse(80, 77, 500, -160, 150, 45) # 左耳朵
tu.end_fill()
tu.fillcolor((205, 155, 29)) # 画笔颜色忘换了。参数调好就别动,效果一样
tu.begin_fill()
guoba_ellipse(50, 45, 500, 165, 140, -33) # 右耳朵内部
tu.end_fill()
tu.begin_fill()
guoba_ellipse(53, 47, 500, -155, 140, 30) # 左耳朵内部
tu.end_fill()
tu.pensize(15)
tu.pencolor((238, 121, 66))
tu.fillcolor((238, 121, 66))
tu.begin_fill()
guoba_ellipse(45, 48, 500, -165, -45, 0) # 左腮红
tu.end_fill()
tu.begin_fill()
guoba_ellipse(30, 50, 500, 170, -45, 15) # 右腮红
tu.end_fill()
tu.pensize(5)
tu.pencolor((0, 0, 0))
# ------------------------ 眼 罩 ------------------------#
guoba_ellipse(280, 185, 500, -5, 107, 2, -121, 62, True) #
tu.fillcolor((0, 0, 0)) #
tu.begin_fill() #
guoba_ellipse(280, 185, 500, -5, 107, 2, -121, 62) #
tu.seth(25) #
tu.pendown() #
tu.circle(55, 210) #
tu.penup() #
tu.setpos(-145, -55) #
tu.pendown() #
tu.seth(157) #
tu.circle(-55, 210) #
guoba_ellipse(120, 80, 500, -5, 95, -1, -135, 90) #
tu.end_fill() #
tu.pendown() #
tu.setpos(-145, -55) #
# ------------------------ 眼 罩 ------------------------#
tu.begin_fill()
guoba_ellipse(22, 15, 300, -105, 105, 25) # 左眉毛
tu.end_fill()
tu.begin_fill()
guoba_ellipse(18, 10, 300, 130, 100, -36) # 右眉毛
tu.end_fill()
tu.pencolor((255, 255, 224))
tu.fillcolor((255, 255, 224))
tu.begin_fill()
guoba_ellipse(80, 45, 500, -5, 65) # 额头白色部分
tu.end_fill()
tu.pencolor((255,193,37))
tu.fillcolor((255,193,37))
tu.begin_fill()
guoba_ellipse(50, 31, 400, -5, 50) # 额头黄色部分
tu.end_fill()
tu.pencolor((255, 250, 250))
tu.fillcolor((255, 250, 250))
guoba_ellipse(21, 35, 400, -115, -8, 7, 0, 360, True)
tu.begin_fill()
guoba_ellipse(21, 35, 400, -115, -8, 7) # 左眼白
tu.end_fill()
tu.begin_fill()
guoba_ellipse(20, 33.5, 500, 120, 0, 4) # 右眼白
tu.end_fill()
# ----------------------- 胡 子 --------------------------#
tu.pencolor((255, 255, 255)) #
tu.fillcolor((255, 255, 255)) #
tu.begin_fill() #
guoba_ellipse(85, 20, 500, 5, -60, 0) #
tu.end_fill() #
guoba_ellipse(85, 20, 500, 5, -60, 0, 140, 360, True) #
tu.seth(-170) #
tu.begin_fill() #
tu.circle(60) #
tu.end_fill() #
guoba_ellipse(85, 20, 500, 5, -60, 0, 40, 360, True) #
tu.seth(-10) #
tu.begin_fill() #
tu.circle(-60) #
tu.end_fill() #
tu.penup() #
# ----------------------- 胡 子 --------------------------#
tu.pencolor((255, 160, 122))
tu.fillcolor((255, 160, 122))
tu.begin_fill()
guoba_ellipse(80, 50, 500, 4, -37, -8, -120, 35) #鼻子
guoba_ellipse(80, 50, 500, 13, -31, 30, -115, 30)
tu.pendown()
tu.setpos(-39.5, -73)
tu.end_fill()
tu.pencolor((0, 0, 0))
tu.pensize(2)
guoba_ellipse(4.2, 7, 400, -115, -8, 7) # 左眼珠
guoba_ellipse(4, 6.7, 500, 120, 0, 4) # 右眼珠
tu.penup()
tu.setpos(690,690)
tu.done()