python画方波_今天学会傅里叶画画,明天就是初音未来 - 如何用Python和Blender画任意图形...

前言:

最近在【编程德鲁伊】的【傅里叶级数可视化】章节中,练习了傅里叶级数基础原理的可视化,演示了周期方波曲线,可以分解为一系列正弦波曲线:

这次拿学到的知识做个实验,试试喜闻乐见的【用傅里叶级数画画】,并尽可能简单直观的解释一下原理。

自认为简单直观的原理解释

之前练习的可视化,都是在二维空间进行,例如正弦波:

方波(通过傅里叶级数):

图中左半边的圆周(Epicycle)和右半边正弦波/方波的关系:左半边是一个运动点,在一个圆周或多个圆周组合上随着时间t转动;

右半边,是将时间t映射到横轴x轴上,纵轴仍是运动点当前的y值保持不变。

也就是说,把时间域转换为空间域,就能从一个圆周得到正弦曲线,或者从一系列圆周组合,得到方波曲线。

我们把方波可视化左右两边的运动点轨迹也画出来:

左半边由一系列圆周(Epicycle)组成的轨迹,与右半边的方波(Square)轨迹,其实只是同一个运动点在不同空间里的展现方式而已。

豁然开朗有没有!!!(此处插入打赏掌声!)

为了说的更清楚一些,接下来把空间域从二维换到三维,时间t不再映射到x轴,而是映射到z轴上:

上图从正面看过去,仍是一个圆周,而在三维空间里旋转坐标轴,从侧面看过去时,它实际上就是一个正弦曲线。

方波的也一样:

正面的橙色轨迹,转换角度,从侧面看,就是方波的曲线。

再次豁然开朗有没有!!!

进一步,根据傅里叶级数原理,为了得到方波(橙色),就要想办法得到组成方波的一系列正弦波(金黄色):

换一个视角,为了得到最终的运动轨迹(橙色),就要想办法得到组成轨迹的一系列Epicycle圆周(金黄色):

而这个橙色的运动轨迹,可以是各种形状,也就是说,无论想画什么图形,只要按照傅里叶级数的原理,找到一系列Epicycle圆周,就可以画出来了!

金猪报喜

傅里叶本尊

怎么样,这样去理解傅里叶级数画画的原理,是不是容易了一些?

接下来要解决的,就是如何为“任意”图案找到对应的一组Epicycle圆周的问题。

从数学上讲,就是求傅里叶级数里每个子项对应的傅里叶系数(a和b):

各项系数a和b都找到后,合起来就可以得到f(x)。

求傅里叶系数的方法有很多,积分、傅里叶变换等。

详细的原理推导,我还没有复习重修,所以对于如何把大象装冰箱的回答,仍然是:

1.打开冰箱门;2.把大象装进去;3.关门。

直接对图案轨迹进行傅里叶变换,即可得到傅里叶系数。

而在计算机程序里,所有的数据都是离散的,所以实际上程序里用的是离散傅里叶变换。

关于这个环节,参考资源较多,尤其是用Web前端/JavaScript/p5.js做的不少,列在后面。

本文的配图和动画,是用 Blender + Python 完成:

等等老乡,还没完。

从上图里傅里叶的配色就能看出,我其实原本是打算画 Miku 酱的(初音未来):

然而码到用时方恨不会,关于傅里叶画画这个问题,其实更难的是找到合适的图案轨迹,并不是随便一个图都能轻松画出来的,这也是为什么上文中,我给任意图案的“任意”两字加了引号。

从数学上讲,在一些特定条件的约束下,一个函数才能用傅里叶级数来表达。

而找出这个图案轨迹的过程,复杂度远超用傅里叶级数画轨迹本身。

后面将附上其他高人的文章供参考。

本文投入的精力仅能画简单的轨迹线,所以Miku就换成了傅里叶他老人家 :

最终效果(三个视角):

参考资源

Talk is cheap. Show me the code!

本文中提到的傅里叶级数基本原理可视化,文章可从公众号菜单“笔记教程-编程德鲁伊”获得。

绝大部分开源在这里:

https://github.com/avantcontra/coding-druid

本文傅里叶画画的实验代码,可在知识星球中获取,感谢已经加入星球的朋友们。

在知识星球里你将持续获得实验代码和无限次答疑。

详情请点击:关于赞赏和内部知识星球。

请猛戳下方赞赏或喜欢作者,buy me a coffee!

您的金钱鼓励是我前进的动力。

微信公众号/知乎专栏/知识星球:实验编程

Cheers~

Contra

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mtk android 5.1 logo,Android ROM DIY之MTK平台手机通用移植

在之前的文章中,我们讨论过ROM刷机原理,修改ROM包以及如何让ROM包获取root权限。那么接下来,我们谈谈MTK平台手机ROM移植的话题。如果你是ROM小白,那么建议可以先看看之前的文章。ROM刷机原理修改ROM包ROM包获取root权限好了请注意…

python变量类型是动态的_python内存动态分配过程详解

一、前言 大多数编译型语言,变量在使用前必须先声明,其中C语言更加苛刻:变量声明必须位于代码块最开始,且在任何其他语句之前。其他语言,想C和java,允许“随时随地”声明变量,比如,变量声明可以…

python树莓派串口通信实例_树莓派通过串口发送数据

可以通过串口登陆树莓派,也可以通过串口向其他主机发送数据。树莓派的串口接受数据科技爱好者博客已经写过,可以参考这篇文章:树莓派与arduino串口通信实践。这篇文章教大家如果通过树莓派的串口发送数据。 一、开启树莓派的串口功能 sudo ra…

sklearn朴素贝叶斯分类器_python机器学习:方法链和朴素贝叶斯分类器

今天我们在学习朴素贝叶斯分类器之前,我们先来总结下前面经常用到的内容,方法链:在scikit-learn中所有模型的fit方法返回的都是self。我们用一行代码初始化模型并拟合,对应代码如下:logreg LogisticRegression().fit(…

python怎么安装request_【python】如何安装requests

在cmd窗口输入pip install requests即可,如下 C:\Users\horn1\Desktop\python\4>pip install requests Collecting requests Downloading requests-2.18.4-py2.py3-none-any.whl (88kB) 100% |████████████████████████████████…

python读取json 网页_Python3 获取以及解析json格式

获取到某个页面的json数据 import requests import json url http://192.168.200.99:8000/student/response requests.get(url) print(response.text)print(type(response.text)) 数据结果: {"code": 1, "data": [{"sno": 0, "n…

24v开关电源维修技巧_焊机维修案例汇总6

案例1:开机保护检查整流桥、场管、快恢复二极管都正常。通电试机,面板亮黄灯,拔掉中板变压器接插线,黄灯灭,怀疑中板变压器有损坏。断电,用电感表测量变压器电感量,中板采用三个变压器并联&…

华为鸿蒙mota30手机多少钱,华为Mate30系列基本确认:麒麟985、鸿蒙系统、5G,价格满意!...

原标题:华为Mate30系列基本确认:麒麟985、鸿蒙系统、5G,价格满意!现在华为越来越的受到国人的重视,一方面是因为米国对于华为的不公正待遇,另一方面还是因为华为产品可以真正的让用户们认可。现在&#xff…

android组合控件 重叠,Android 组合控件实现布局的复用的方法

看到很多项目会有实现自己的标题栏的做法,通常的界面是左边按钮或文字,加上中间的标题和右边的按钮或文字组成的。比较好的一种做法是使用include标签,复用同一个xml文件来实现布局的复用。但是这种方法是通过代码的方式来设置标题&#xff0…

1到100的偶数之和是多少_新射雕群侠传之铁血丹心手游新侠客独孤求败全渠道上线 新玩法桃花岛开启...

点击上面蓝字获取更多精彩资讯金庸正版授权手游《新射雕群侠传之铁血丹心》新英雄独孤求败傲世登场,桃花岛新惊喜即将海量释放!国庆最长假期即将到来,《新射雕群侠传》玩法福利再度升级,不止是神话品质独孤求败的安卓全渠道开放,更…

python顺序结构实验_Python程序设计实验报告二:顺序结构程序设计(验证性实验)...

安徽工程大学 Python程序设计实验报告 班级物流192姓名芦靓学号3190505217成绩 日期2020.3.19 指导老师修宇 【实验名称】 实验二 顺序结构程序设计(验证性实验) 【实验目的】 (1)掌握数据的输入输出的方法; &#xff…

三星s9android recovery,三星手机怎么进入recovery模式?详细图文教程指导

【刷机之家】其实对于经常刷机的朋友来说进入recovery模式是一件再正常不过的事情了,但是对于很多刚刚接触刷机的新手朋友来说可能不太了解,当你仔细阅读完本教程之后相信即使你是一个完全不了解刷机的朋友也会知道该如何进入recovery模式。本教程主要是…

css布局方式_网页布局都有哪种?一般都用什么布局?

随着Web技术不断的革新,CSS近几年也变得多年前要更强大。在Web开发中,CSS是不可或缺的一部分,对于很多Web开发者来说,有很多CSS属性不知道,或者说他们知道,但忘记在最恰当的时候使用最适合的CSS属性。而且时…

复合消隐信号的作用_南大《AFM》:可拉缩、粘合、导电的双信号柔性彩色薄膜...

导读:本文得到了一种可伸缩、可粘合、可自修复、可导电的双信号柔性电子结构彩色薄膜,具有很大的应用潜力。柔性电子设备在各种应用中发挥着不可忽视的作用,如健康监控、感觉皮肤、可植入设备等。柔性电子材料的研究已取得了很大进展&#xf…

织梦编辑器加HTML视频显示很小,织梦去掉编辑器自动加div的方法即大小字情况...

织梦dedecms每次新上传图片插入编辑器会自动加p标签,这个会导致网页错位等问题。以下是修改方法。第一种解决方法:修改网站根目录\include\FCKeditor\editor\dialog\dede_image.php找到//FCK.InsertHtml(inImg);var newCode FCK.CreateElement(p);newCo…

三轴加速度传感器和六轴惯性传感器_一文读懂汽车MEMS惯性传感器的七大应用(上)...

本文中,我们将研究汽车MEMS惯性传感器的应用,描述它们的工作原理,并讨论如何利用MEMS惯性传感器来实现更大的应用改进。 当前,微机电系统(MEMS)传感器已被大多数汽车工程师视为尖端技术或边缘技术&#xff…

criteria函数_干货铺 | 二级MS office考试中一些常考函数(2)

同步文章:二级MS office考试中一些常考函数(2)1.AVERAGE(Number1,Number2,…)函数——计算平均值函数:参数解释:Number1,number2,...是要计算平均值的 1~255 个参数。2.averageif(ra…

html中图片透明度渐变效果,css怎么设置透明度渐变?

css怎么设置透明度渐变?下面本篇文章给大家介绍一下使用CSS设置透明度渐变效果的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。css怎么设置透明度渐变?在CSS中可以使用linear-gradient()函数配合rgba()来…

oc 画一个圆弧_SolidWorks一步扫描特征,就可以画出一个螺母,你有思路吗

建模过程:1.在【上视基准面】画一个六边形。(引导线)1-1.圆角,半径:2 ,框选六边形。2.在【前视基准面】画草图如下:(轮廓)2-1.左侧画一段竖直构造线,端点与圆弧穿透几何关系。3.【线段】草图绘制点&#xf…

python默认安装位置_如何更改python中pip的默认安装路径

具体方法: 1、查看 site.py 文件的位置(一般在python安装目录的\Lib下),可使用指令查询:python -m site -help2、打开site.py文件,更改 USER_BASE 和USER_SITE 的路径即可。其中 USER_BASE 和USER_SITE其实就是用户自定…