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

这个程序需要用到 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()

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

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

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

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

  1. python用for循环画雪花图形_超详细讲解如何五步画出立体彩色雪花

    话不多说先上最终效果图: 这个程序需要用到 turtle 库绘制图案, random 库获取随机颜色,以及 递归 的算法 具体的详细turtle库使用说明,推荐这个链接,非常详细>>> ...

  2. Python的零基础超详细讲解(第五天)-Python的运算符

    往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...

  3. Python的零基础超详细讲解(第十二天)-Python函数及使用

    基础篇往期文章: Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博 ...

  4. Python的零基础超详细讲解(第七天)-Python的数据的应用

    往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...

  5. 生存曲线 p值 python_超详细讲解生信SCI中的生存曲线作图,不看后悔系列

    原标题:超详细讲解生信SCI中的生存曲线作图,不看后悔系列 在线及个性化精美Kaplan-Meier生存曲线的绘制 大家好,我是阿琛.俗话说,是骡子是马拉出来溜溜.在肿瘤研究中,一个基因的研究价值高不 ...

  6. Python的零基础超详细讲解(第十三天)-Python的类与对象

    基础篇往期文章如下: Python的零基础超详细讲解(第一天)-Python简介以及下载 Python的零基础超详细讲解(第二天)-Python的基础语法1 Python的零基础超详细讲解(第三天)- ...

  7. mybatis-plus超详细讲解

    (6条消息) mybatis-plus超详细讲解_zdsg45的博客-CSDN博客_mybatis-plushttps://blog.csdn.net/zdsg45/article/details/1 ...

  8. stm32f103利用HC06进行蓝牙通信,在7针的OLED屏幕上显示,带数据更新功能(带超详细讲解)

    stm32f103利用HC06进行蓝牙通信,在7针的OLED屏幕上显示,带数据更新功能(带超详细讲解) 首先看看效果吧 手机端发送一个数据在OLED屏幕上显示 其实蓝牙通信就是个蓝牙转串口的过程,手机 ...

  9. Java基础18-String类【String类的特点对象个数常用方法】【超详细讲解】

    Java基础-String类[超详细讲解] String类的特点 String在java.lang.String包中 1:特点 (1)String类型不能被继承,因为由final修饰 (2)Strin ...

最新文章

  1. 面向对象程序设计(Java)
  2. 云信市场运营总监:产品运营不得不避免的5个大坑
  3. 虚拟机无法开机数据恢复 (建议在做之前做测试,数据双重备份)
  4. matlab中向量norm,【Matlab开发】matlab中norm范数以及向量点积、绘图设置相关
  5. Java程序员应该知道的10个Eclipse调试技巧
  6. java 与 c#的 中 字符串比较“==”与“equals”的差异
  7. 工具类集和_gblfy版本
  8. mysql 语句 not_mysql sql语句 is not 用法是
  9. jquert ajax文件 mvc,jquery ajax file upload NET MVC 无刷新文件上传
  10. PHP利用分组查询groupby,Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy...
  11. 说话人识别python_基于各种分类算法的说话人识别(年龄段识别)
  12. violate、内存屏障
  13. 3D点云重建0-10:MVSNet-源码解析(6)-Depth Map Refinement以及Loss讲解
  14. java scjp 试题_JAVA认证历年真题:SCJP考试真题和解析[1]
  15. 雅马哈机器人左手右手系统_YAMAHA机械手操作手册.PDF
  16. python学生成绩管理程序设计总框图_学生成绩管理系统ER图+流程图+组织结构图-课程设计...
  17. 家到学校路线图怎么画_PPT绘制家到学校路线图教程
  18. 【目标检测】YOLOv5分离检测和识别
  19. 设计模式01策略模式
  20. 【21天转型区块链】DAY2

热门文章

  1. iode、iodc、aode、aodc的区别与联系
  2. 一文读懂 B2B 内容营销
  3. 一切成功源于积累——20140927 认识货币——欧元
  4. Ubuntu20.04安装NVIDIA驱动相关问题汇总
  5. 【云周刊】第134期:阿里云发布ECS企业级产品家族 19款实例族涵盖173个应用场景...
  6. Android 基于google Zxing实现二维码、条形码扫描
  7. 基于K210开源AI智能跟随云台OpenFollow(一) 项目介绍
  8. 重磅!Micro Focus在Radicati年度数据归档市场象限中被评为行业领导者
  9. canvas节点无法导出图片_uniapp canvas绘制图片后无法canvasToTempFilePath导出
  10. 服务器机房监控系统研究,机房环境及服务器运行状态的嵌入式监控系统设计