Python 绘制科赫雪花的简单实现
时间:2022-07-22
本文章向大家介绍Python 绘制科赫雪花的简单实现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
成果展示 ?
简单的跑了一下程序,结果如下,这个画图的速度已经是最快了 ??? :
源代码 ?
源码如下,这是最简单的实现,大佬勿喷 ?。
"""
@author: shoo Wang
@contact: wangsuoo@foxmail.com
@file: demo01.py
@time: 2020/4/16 0016
"""
import turtle
import random
'''
雪花位置随机
雪花个数随机[2,10]之间
雪花大小随机
'''
# 递归的画科赫曲线,控制阶数和角度
def koch(size, n):
if n == 0:
turtle.fd(size)
else:
for angle in [0, 60, -120, 60]:
turtle.left(angle)
koch(size / 3, n - 1)
# 控制雪花的个数、位置; 此函数为核心函数!
def control_num(n):
# 一个随机函数控制随机位置和大小,参数为雪花的个数
for i in range(n):
# 隐藏画笔
turtle.hideturtle()
# 开始填充背景颜色
turtle.begin_fill()
turtle.color('white')
# 生成随机数,控制 x 轴 与 y 轴
num1 = random.randint(-100, 100)
num2 = random.randint(-100, 100)
num3 = random.randint(20, 80)
# 控制位置随机
control_locate(num1 * 3, num2 * 3)
# 控制大小和阶数
control_size(num3, 3)
turtle.end_fill()
# 设置画笔的属性
def pen_attr():
# 设置背景颜色
turtle.bgcolor('blue')
# 设置画笔的颜色和速度等属性, (吐槽一下速度真的慢,最快就是10了
turtle.pen({'pensize': 1, 'shown': True, 'resizemode': 'auto', 'outline': 1,
'pencolor': 'white', 'pendown': False, 'fillcolor': 'white',
'speed': 10})
# 控制每一阶的 大小、转向
def control_size(size, level, angle = 120):
# 画第一部分
koch(size, level)
turtle.right(angle)
# 画第二部分
koch(size, level)
turtle.right(angle)
# 画第三部分
koch(size, level)
# 控制位置随机
def control_locate(resetX, resetY):
# turtle.setup(startX, startY)
turtle.penup()
turtle.goto(resetX, resetY)
turtle.pendown()
# 主函数
def main():
"""
总体控制画布的位置,入口函数,调用其他函数
"""
# 控制个数, 这里是随机,[2,10]
num = random.randint(2, 10)
control_num(num)
turtle.done()
# 函数调用,启动!!!
main()
已知 BUG ?
- 雪花有重叠,不过我觉得这也正常,毕竟现实中下雪也会有重叠 ?;
- 有的雪花会出界,可以简单的通过控制边界的大小和雪花随机出现的位置避免,也可以在循环的时候多加一条判断,如果出界就 continue;
总结一下,练习了函数的运用以及一些算法的头脑风暴,复习了海龟绘图以及 random 库函数的调用。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android实现签名涂鸦手写板
- Android 开发使用Activity实现加载等待界面功能示例
- 详解Android使用CoordinatorLayout+AppBarLayout+CollapsingToolbarLayou实现手指滑动效果
- Android开发自定义控件之折线图实现方法详解
- Android Studio实现长方体表面积计算器
- android studio实现简单的计算器功能
- Android小程序实现个人信息管理系统
- Flutter 使用Navigator进行局部跳转页面的方法
- Android小程序实现简易QQ界面
- Android小程序实现音乐播放列表
- 详解Android10的分区存储机制(Scoped Storage)适配教程
- Android自定义View实现可拖拽缩放的矩形框
- Android实现掷骰子效果
- Android实现侧滑菜单DrawerLayout
- Android :okhttp+Springmvc文件解析器实现android向服务器上传照片