闲聊,Python中的turtle
写在前面
其实我也不知道为什么我会写这个,本文涉及信号与传递,Python
正题
近期看到一个3年前的视频,1000个圆一笔画出一个Miku

在观看完源码了以后,我发现这是这调用的是基本的goto,用了傅里叶级函数(傅里叶级变化),那个视频中给出了分析,只要圆足够多,就可以画出任意的封闭曲线
任意满足狄利克雷条件的函数,其本身的傅里叶级数都是收敛的。也就是说,函数可以表示成无限个正弦函数和余弦函数和的形式。
假如说我我能把我们需要绘制的二维图像表现在复平面上,把它的轨迹表现成有关时间t的复函数,那么,横坐标的移动和纵坐标的移动都可以看作是关于时间t的函数。
以上的两个函数都是实函数,都可以展开成傅里叶级数

展开的公式太难写了,所以就截图了。
然后,我们对二维图像的轨迹稍加处理,发现这也是个傅里叶级展开式,只不过前面的系数变成了复数。这样子的解释不是证明,但是在傅里叶级变换的复数表示里,正弦函数都是可以通过余弦函数增加一个初始相位来表示,实函数的傅立叶变换才是傅立叶变换的特殊形式,这里不解释。
\(c_n=\int_{0}^{1}{e^{-2i\pi nt}f(t)dt}\)
我们求得这些级数了以后,只需要把系数代回这个公式得到一个坐标

这时,就可以用turtle的goto函数移动到指定的坐标,达到绘制图形的目的

值得思考的
同时函数的傅立叶变换相同,我们计算的级数越多,结果我们越接近我们原本绘制的轨迹,不联系的函数也可以进行傅里叶变换,配合turtle的penup和pendown函数,我们就可以得到断断续续线,绘制过程中的精度也不是越大越好,最佳精度和我们上面分析的级数有关系。
操作
在Adobe illustrator里面设计好自己的图案
图案要一笔带过,中间的线条可以重叠,可以急转弯,但是一定是一笔
然后保存为SVG。
在SVG文件中

把路径复制,
<path class="st0" d='............' />
把省略号中的复制,就是那一大串数字和字母的组合。
保存到ra开头的txt文件中,源码在下面
源码
接下来的,自己琢磨吧...
彩蛋
画个绿色的长虫
import turtle as t
def drawSnake(radius, angle, length):
t.seth(-40)
for i in range(length):
t.circle(radius, angle)
t.circle(-radius, angle)
t.circle(radius, angle/2)
t.fd(40)
t.circle(16, 180)
t.fd(40*2/3)
t.setup(650, 350, 200, 200)
t.penup()
t.fd(-250)
t.pendown()
t.pensize(25)
t.pencolor('green')
drawSnake(40, 80, 4)
t.down()
闲聊,Python中的turtle的更多相关文章
- python中的turtle库绘制图形
1. 前奏: 在用turtle绘制图形时,需要安装对应python的解释器以及IDE,我安装的是pycharm,在安装完pycharm后,在pycharm安装相应库的模块,绘图可以引入turtle模块 ...
- Python中的turtle初探
turtle Python自带了一个turtle库,就像名字turtle说的那样,你可以创建一个turtle,然后这个turtle可以前进,后退,左转,这个turtle有一条尾巴,能够放下和抬起,当尾 ...
- python中关于turtle库的学习笔记
一.基础概念 1.画布:画布就是turtle为我们展开用于绘图区域, 我们可以设置它的大小和初始位置.常用的画布方法有两个:screensize()和setup(). (1)turtle.screen ...
- python中的turtle库(图形绘画库)
turtle绘图的基础知识:1. 画布(canvas) 画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置. 设置画布大小 turtle.screensize(canvwidt ...
- 使Python中的turtle模块画图两只小羊
turtle.circle(radius, extent=None, steps=None) 描述: 以给定半径画圆 参数: radius(半径); 半径为正(负),表示圆心在画笔的左边(右边)画圆 ...
- Python学习之turtle库和蟒蛇绘制程序
Python的函数库 Python语言与C语言Java类似,可以大量使用外部函数库包含在安装包中的函数库:. 比如math, random, turtle等其他函数库,其他函数库用户根据代码需求自行安 ...
- python中库引用与import
在蟒蛇绘制函数中,多有turtle. ,称它为<a>.<b>的编码风格 库引用 扩充python程序功能的方式 使用import保留字完成,采用<a>.< ...
- [转]Python中的str与unicode处理方法
早上被python的编码搞得抓耳挠腮,在搜资料的时候感觉这篇博文很不错,所以收藏在此. python2.x中处理中文,是一件头疼的事情.网上写这方面的文章,测次不齐,而且都会有点错误,所以在这里打算自 ...
- python中的Ellipsis
...在python中居然是个常量 print(...) # Ellipsis 看别人怎么装逼 https://www.keakon.net/2014/12/05/Python%E8%A3%85%E9 ...
随机推荐
- Linux——CentOS7添加/删除用户和用户组1
Linux--CentOS7添加/删除用户和用户组 2017.05.02 19:58 23012浏览 前言 今天又重新装了centos7突然有关用户和用户组有关的命令记不清了,所以记一下,也方便你 ...
- jQuery的链式编程风格
jQuery的链式编程风格 首先本人通过一个案例来展示jQuery的链式编程风格.先写一个页面,展示一个列表,代码如下: <body> <div> <ul class=& ...
- Azure Synapse Link for Dataverse
MyBuild - Scale, analyze and serve Microsoft Dynamics 365 application data with Azure 本周的微软Bulid大会上发 ...
- AlertDailog中的which问题
在做一个AlertDialog的点击事件设置的时候: AlertDialog.Builder(this).apply { var numberIndex = 0 setTitle("choo ...
- 七、.net core(.NET 6)使用Serilog进行配置和实现日志记录
使用Serilog来实现日志记录 先安装Serilog六件套神装包: 也可以对个别相应的包进行删除等,都是可以的.例如,标注的1是读取配置文件的,如果不需要通过配置文件进行操作,就可以使用这个包.2是 ...
- 快速上手 Linkerd v2 Service Mesh(服务网格)
在本指南中,我们将引导您了解如何将 Linkerd 安装到您的 Kubernetes 集群中. 然后我们将部署一个示例应用程序来展示 Linkerd 的功能. 安装 Linkerd 很容易.首先,您将 ...
- 游刃于私有网络与公共网络之间的NAT
网络地址转化技术NAT 1. 应用场景 2. NAT 2.1 静态NAT 2.2 动态NAT 2.3 NAPT 2.4 EASY IP 3. NAT配置 3.1 静态NAT 3.2 动态NAT 3.3 ...
- python发送丁丁消息
import requests import time import hashlib import hmac import base64 import re def SendMessage(messa ...
- Docker学习(14) Docker容器的数据管理
Docker容器的数据管理 Docker容器的数据卷 重要: Docker的数据卷容器 Docker数据卷的备份和还原
- GO语言常用标准库04---flag读取命令行参数
package main import ( "flag" "fmt" "math" "os" ) /* go build ...