今天是六一儿童节~身为我们班的信息担当的我为我们班同学准备了一个小惊喜,你确定不来看看吗(turtle库实现:送给同学们一朵小红花)

目录

一.实现思路

二.花朵的实现方法

 三.花朵的茎实现方法

四.画出第一片叶子的方法

五.画出第二片叶子的方法

六.如何设置页面主体

结尾


今天呢,也是一年一度的六一儿童节(虽然各位大佬可能不过,但是我还是要过的),在我们六年级过的时候,我们班同时也举行了毕业典礼,为了这个毕业典礼,我写了一晚上代码(这就是昨天没更新的原因),也就写了两个小时就写完了,所以今天我们用Python里的turtle库(随便写的,要不然我怎么会写turtle库呢)实现一个小红花吧送给我们班的同学们~(千万不要让老师知道我把电脑控屏软件给破解了,极域电子教室,某些人别跟信息老师说)

也是非常的水~ 

一.实现思路

  • 第一步:画出花朵主体
  • 第二步:画出花朵的茎
  • 第三步:画出第一片叶子
  • 第四步:画出第二片叶子
  • 第五步:设置画面主体

二.花朵的实现方法

先来看一眼效果:

首先我们定义一个函数,叫做flower,然后我们就要用这个函数画花瓣了 

我们首先来画花瓣的弧,我们先求出弧的长度,即

2*\pi *r*\left | angle \right |/360

这时我们就可以求出要多少个才能画出这个大花瓣,即:

int(arc_length / 4) + 1

这个是所有弧的长度,要想知道每一个弧的长度,我们就要这样:

step_length = arc_length / n

这时每一个角的度数就也可以求了

float(angle) / n

现在我们正式画花瓣。首先这个笔在起步时要慢,因为这是一个弧形,并且要慢慢拐弯,也就是如下代码:

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()

祝所有人儿童节快乐~天天开心~

posted @ 2023-06-01 19:47  我爱OJ  阅读(15)  评论(0编辑  收藏  举报  来源