今天是六一儿童节~身为我们班的信息担当的我为我们班同学准备了一个小惊喜,你确定不来看看吗(turtle库实现:送给同学们一朵小红花)
目录
今天呢,也是一年一度的六一儿童节(虽然各位大佬可能不过,但是我还是要过的),在我们六年级过的时候,我们班同时也举行了毕业典礼,为了这个毕业典礼,我写了一晚上代码(这就是昨天没更新的原因),也就写了两个小时就写完了,所以今天我们用Python里的turtle库(随便写的,要不然我怎么会写turtle库呢)实现一个小红花吧,送给我们班的同学们~(千万不要让老师知道我把电脑控屏软件给破解了,极域电子教室,某些人别跟信息老师说)
也是非常的水~
一.实现思路
- 第一步:画出花朵主体
- 第二步:画出花朵的茎
- 第三步:画出第一片叶子
- 第四步:画出第二片叶子
- 第五步:设置画面主体
二.花朵的实现方法
先来看一眼效果:
首先我们定义一个函数,叫做flower,然后我们就要用这个函数画花瓣了
我们首先来画花瓣的弧,我们先求出弧的长度,即
这时我们就可以求出要多少个才能画出这个大花瓣,即:
这个是所有弧的长度,要想知道每一个弧的长度,我们就要这样:
这时每一个角的度数就也可以求了
现在我们正式画花瓣。首先这个笔在起步时要慢,因为这是一个弧形,并且要慢慢拐弯,也就是如下代码:
def p_line(t, n, length, angle):
for i in range(n):
t.fd(length)
t.lt(angle)
t.lt(step_angle/2)
p_line(t, n, step_length, step_angle)
t.rt(step_angle/2)
注意,如上代码只会画半个弧,要想画成一个花瓣,我们就可以使用一个for循环来控制
for i in range(2):
arc(t, r, angle)
t.lt(180-angle)
整理一下,以下是完整画花瓣的代码:
import turtle
import math
def p_line(t, n, length, angle):
for i in range(n):
t.fd(length)
t.lt(angle)
def arc(t, r, angle):
arc_length = 2 * math.pi * r * abs(angle) / 360
n = int(arc_length / 4) + 1
step_length = arc_length / n
step_angle = float(angle) / n
t.lt(step_angle/2)
p_line(t, n, step_length, step_angle)
t.rt(step_angle/2)
def petal(t, r, angle):
for i in range(2):
arc(t, r, angle)
t.lt(180-angle)
def flower(t, n, r, angle, p):
for i in range(n):
petal(t, r, angle)
t.lt(p/n)
def main():
window= turtle.Screen() #creat a screen
window.bgcolor("white")
window.title("draw a flower")
lucy= turtle.Turtle()
lucy.shape("turtle")
lucy.color("red")
lucy.width(3)
#lucy.speed(10)
flower(lucy, 7, 60, 100, 360)
main()
三.花朵的茎实现方法
首先我们可以设置画笔颜色,用pen.color语句
注意,此时我们的笔是朝向右侧的,所以我们需调整一下方向,用pen.right语句
最后我们画一条直线就行,用pen.forward语句
代码如下:
lucy.color("brown")
lucy.rt(90)
lucy.fd(200)
四.画出第一片叶子的方法
首先我们先来设置一下笔的方向,粗细和颜色
lucy.width(1)
lucy.rt(270)
lucy.color("green")
然后我们写一下画叶子的函数
def leaf(t, r, angle, p):
t.begin_fill()
t.down()
flower(t, 1, r, angle, p)
t.end_fill()
最后我们再来画一下纹理
lucy.color("black")
lucy.fd(30)
lucy.lt(180)
lucy.fd(30)
这样就完事了
五.画出第二片叶子的方法
因为这里使用的是函数,所以和上面大相径庭,大家可以看看
lucy.rt(120)
lucy.color("green")
leaf(lucy, 40, 80, 180)
lucy.color("black")
lucy.rt(140)
lucy.fd(30)
lucy.ht()
六.如何设置页面主体
其实就是固定的框架,大家看一下就行
其实就是一些背景颜色,弹窗名字,设置画笔的宽度,颜色,样式等
window.bgcolor("white")
window.title("draw a flower")
lucy= turtle.Turtle()
lucy.shape("turtle")
lucy.color("red")
lucy.width(3)
结尾
以下是完整代码:
import turtle
import math
def p_line(t, n, length, angle):
for i in range(n):
t.fd(length)
t.lt(angle)
def polygon(t, n, length):
angle = 360/n
p_line(t, n, length, angle)
def arc(t, r, angle):
arc_length = 2 * math.pi * r * abs(angle) / 360
n = int(arc_length / 4) + 1
step_length = arc_length / n
step_angle = float(angle) / n
t.lt(step_angle/2)
p_line(t, n, step_length, step_angle)
t.rt(step_angle/2)
def petal(t, r, angle):
for i in range(2):
arc(t, r, angle)
t.lt(180-angle)
def flower(t, n, r, angle, p):
for i in range(n):
petal(t, r, angle)
t.lt(p/n)
def leaf(t, r, angle, p):
t.begin_fill()
t.down()
flower(t, 1, r, angle, p)
t.end_fill()
def main():
window= turtle.Screen()
window.bgcolor("white")
window.title("draw a flower")
lucy= turtle.Turtle()
lucy.shape("turtle")
lucy.color("red")
lucy.width(3)
#lucy.speed(10)
flower(lucy, 7, 60, 100, 360)
lucy.color("brown")
lucy.rt(90)
lucy.fd(200)
lucy.width(1)
lucy.rt(270)
lucy.color("green")
leaf(lucy, 40, 80, 180)
lucy.rt(140)
lucy.color("black")
lucy.fd(30)
lucy.lt(180)
lucy.fd(30)
lucy.rt(120)
lucy.color("green")
leaf(lucy, 40, 80, 180)
lucy.color("black")
lucy.rt(140)
lucy.fd(30)
lucy.ht()
window.exitonclick()
main()
祝所有人儿童节快乐~天天开心~