超详细讲解如何五步画出立体彩色雪花

话不多说先上最终效果图:

在这里插入图片描述

这个程序需要用到 turtle 库绘制图案, random 库获取随机颜色,以及 递归 的算法

具体的详细turtle库使用说明,推荐这个链接,非常详细》》》:turtle库官方文档简体中文

那这个程序怎么绘制呢?

首先用递归绘制一个3阶科勒曲线,代码有注释就不细说了,直接看代码》》》

step1: 定义一个函数koch有两个参数一个是长度,一个是次数

def koch(size, n):
    if n == 0:#当n为0时,画一条直线
        turtle.fd(size)
    else:
        for angle in [0, 60, -120, 60]:#n不为0时
            turtle.left(angle)#将一条直线分三段,每次旋转相同角度
            koch(size/3, n-1)#递归调用
#调用函数:
koch(400,3)

运行效果:
在这里插入图片描述

step2:画出了一段科勒曲线后,这还不是一个封闭图形,需要将三个科勒曲线连起来就是一个科勒曲线了,相当于是一个正三角形。

koch(400, 3)#调用koch函数
turtle.right(120)#旋转120度
#再调用依次类推,一共调用三次
koch(400, 3)
turtle.right(120)
koch(400, 3)

这样我们的小雪花就初见成效了:

看效果:
在这里插入图片描述

step3: 那么立体感是怎么实现的呢

只需要在每画完一条直线后就连接一条直线到整个图案的中心点,然后再返回出发点继续画下一条直线。

那么如何获取这个图案的中心点呢?
这里需要用到turtle库的一个方法: turtle.pos()获取当前海龟坐标,仔细观察step2里的雪花图案我们会发现,这其中有三个重要的点:(我用红色把这三个点标注出来看)》》》

turtle.color('red')
turtle.dot(20)# 绘制红点
turtle.color('black')
koch(400, 3)
turtle.color('red')
turtle.dot(20)
turtle.color('black')
turtle.right(120)
koch(400, 3)
turtle.color('red')
turtle.dot(20)
turtle.color('black')
turtle.right(120)
koch(400, 3)
turtle.done()

在这里插入图片描述

如果把这三个点连起来看看是什么形状》》》

turtle.dot(20)# 绘制红点
pos1 = turtle.pos()#获取点1坐标
turtle.color('black')
koch(400, 3)
turtle.color('red')
turtle.dot(20)
pos2 = turtle.pos()#获取点2坐标
turtle.color('black')
turtle.right(120)
koch(400, 3)
turtle.color('red')
turtle.dot(20)
pos3 = turtle.pos()#获取点3坐标

然后我们把这三个点连起来》》》

turtle.reset()#重置
turtle.pu()
turtle.goto(pos1)
turtle.pd()
turtle.goto(pos2)
turtle.goto(pos3)
turtle.goto(pos1)
turtle.done()

运行效果:
在这里插入图片描述
果然是一个等边三角形,所以这个等边三角形的中心就是雪花图案的中心,怎么计算等边三角形中心是数学问题,就不专门介绍了》》》

我获取到的三个点坐标为: 在这里插入图片描述
所以可以得到中心点坐标pos = (100,-(300/pow(3,0.5)-200))

step4: 在原有的雪花图案上加上这条往返于中心点的线

def koch(size, n):
    if n == 0:
        turtle.fd(size)
        pos = turtle.pos()# 获取当前坐标作为出发点
        turtle.goto(100,-(300/pow(3,0.5)-200))# 从出发点到中心点
        turtle.goto(pos)# 从中心点回到出发点
    else:
        for angle in [0, 60, -120, 60]:
            turtle.left(angle)
            koch(size/3, n-1)

运行结果:
在这里插入图片描述

**step5:**添加颜色

step4已经画出了一个黑白的立体雪花,那如何添加彩色呢?

这里使用random 库里的random()方法,可以获取(0.0-1.0)之间的随机数。

        r, g, b = random.random(), random.random(), random.random()# 给r, g, b赋值随机数
        turtle.color(r, g, b)# 随机改变海龟颜色
        turtle.fd(size)

最后附上完整代码(复制直接可运行)》》》》》

import turtle, random
def koch(size, n):
    if n == 0:
        # r, g, b = random.random(), random.random(), random.random()
        # turtle.color(r, g, b)
        turtle.fd(size)
        pos = turtle.pos()
        turtle.goto(100,-(300/pow(3,0.5)-200))
        turtle.goto(pos)
    else:
        for angle in [0, 60, -120, 60]:
            turtle.left(angle)
            koch(size/3, n-1)
def main():
    turtle.penup()
    turtle.goto(-200, 200)
    turtle.pendown()
    turtle.pensize(1)
    pos1 = turtle.pos()
    koch(600, 3)
    turtle.right(120)
    pos2 = turtle.pos()
    koch(600, 3)
    pos3 = turtle.pos()
    turtle.right(120)
    koch(600, 3)
    turtle.hideturtle()
    print(pos1, pos2, pos3)
    turtle.done()
if __name__ == '__main__':
    main()

=====================================================================

如果觉得我的文章对你有帮助的,麻烦动动你的小手,关注支持一波!谢谢啦

########################################################################

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Franda914

有钱的捧个钱场,没钱的点的赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值