写在前面

其实我也不知道为什么我会写这个,本文涉及信号与传递,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的更多相关文章

  1. python中的turtle库绘制图形

    1. 前奏: 在用turtle绘制图形时,需要安装对应python的解释器以及IDE,我安装的是pycharm,在安装完pycharm后,在pycharm安装相应库的模块,绘图可以引入turtle模块 ...

  2. Python中的turtle初探

    turtle Python自带了一个turtle库,就像名字turtle说的那样,你可以创建一个turtle,然后这个turtle可以前进,后退,左转,这个turtle有一条尾巴,能够放下和抬起,当尾 ...

  3. python中关于turtle库的学习笔记

    一.基础概念 1.画布:画布就是turtle为我们展开用于绘图区域, 我们可以设置它的大小和初始位置.常用的画布方法有两个:screensize()和setup(). (1)turtle.screen ...

  4. python中的turtle库(图形绘画库)

    turtle绘图的基础知识:1. 画布(canvas) 画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置. 设置画布大小 turtle.screensize(canvwidt ...

  5. 使Python中的turtle模块画图两只小羊

    turtle.circle(radius, extent=None, steps=None) 描述: 以给定半径画圆 参数: radius(半径); 半径为正(负),表示圆心在画笔的左边(右边)画圆 ...

  6. Python学习之turtle库和蟒蛇绘制程序

    Python的函数库 Python语言与C语言Java类似,可以大量使用外部函数库包含在安装包中的函数库:. 比如math, random, turtle等其他函数库,其他函数库用户根据代码需求自行安 ...

  7. python中库引用与import

    在蟒蛇绘制函数中,多有turtle.   ,称它为<a>.<b>的编码风格 库引用 扩充python程序功能的方式 使用import保留字完成,采用<a>.< ...

  8. [转]Python中的str与unicode处理方法

    早上被python的编码搞得抓耳挠腮,在搜资料的时候感觉这篇博文很不错,所以收藏在此. python2.x中处理中文,是一件头疼的事情.网上写这方面的文章,测次不齐,而且都会有点错误,所以在这里打算自 ...

  9. python中的Ellipsis

    ...在python中居然是个常量 print(...) # Ellipsis 看别人怎么装逼 https://www.keakon.net/2014/12/05/Python%E8%A3%85%E9 ...

随机推荐

  1. Linux——CentOS7添加/删除用户和用户组1

    Linux--CentOS7添加/删除用户和用户组 2017.05.02 19:58 23012浏览   前言 今天又重新装了centos7突然有关用户和用户组有关的命令记不清了,所以记一下,也方便你 ...

  2. jQuery的链式编程风格

    jQuery的链式编程风格 首先本人通过一个案例来展示jQuery的链式编程风格.先写一个页面,展示一个列表,代码如下: <body> <div> <ul class=& ...

  3. Azure Synapse Link for Dataverse

    MyBuild - Scale, analyze and serve Microsoft Dynamics 365 application data with Azure 本周的微软Bulid大会上发 ...

  4. AlertDailog中的which问题

    在做一个AlertDialog的点击事件设置的时候: AlertDialog.Builder(this).apply { var numberIndex = 0 setTitle("choo ...

  5. 七、.net core(.NET 6)使用Serilog进行配置和实现日志记录

    使用Serilog来实现日志记录 先安装Serilog六件套神装包: 也可以对个别相应的包进行删除等,都是可以的.例如,标注的1是读取配置文件的,如果不需要通过配置文件进行操作,就可以使用这个包.2是 ...

  6. 快速上手 Linkerd v2 Service Mesh(服务网格)

    在本指南中,我们将引导您了解如何将 Linkerd 安装到您的 Kubernetes 集群中. 然后我们将部署一个示例应用程序来展示 Linkerd 的功能. 安装 Linkerd 很容易.首先,您将 ...

  7. 游刃于私有网络与公共网络之间的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 ...

  8. python发送丁丁消息

    import requests import time import hashlib import hmac import base64 import re def SendMessage(messa ...

  9. Docker学习(14) Docker容器的数据管理

    Docker容器的数据管理 Docker容器的数据卷 重要: Docker的数据卷容器 Docker数据卷的备份和还原

  10. GO语言常用标准库04---flag读取命令行参数

    package main import ( "flag" "fmt" "math" "os" ) /* go build ...