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
python画方波_今天学会傅里叶画画,明天就是初音未来 - 如何用Python和Blender画任意图形...相关推荐
- 用python画叶子_今天学会傅里叶画画,明天就是初音未来 - 如何用Python和Blender画任意图形...
前言: 最近在[编程德鲁伊]的[傅里叶级数可视化]章节中,练习了傅里叶级数基础原理的可视化,演示了周期方波曲线,可以分解为一系列正弦波曲线: 这次拿学到的知识做个实验,试试喜闻乐见的[用傅里叶级数画画 ...
- python海龟绘图画海螺_我学会了画画100字
我学会了画画100字 时间:05-09 作者: 篇一:我学会了画画[100字] 杜昊航 今天下午上了美术课,美术课佷有意思,今天把我们上节课画的钟表.楼房.轮船.蘑菇都涂了颜色.我把送货物的轮船涂完了 ...
- python采集直播_天天再看斗鱼直播?教你如何用Python技术抓取弹幕
说起来,弹幕这种东西的出现,真的给众多网友带来无数的欢乐源泉. 当然,密集恐惧症患者慎入,毕竟某些视频的弹幕可谓是刷得密密麻麻的. 整个屏幕看的不是剧情,是弹幕. 以前是磕CP很快乐,现在是磕着弹幕也 ...
- python爱心代码_「含蓄优雅表白神器」程序员式用python代码画爱心(附详细教程)...
还能用python代码画爱心?还有这种操作?这是什么原理? 不相信python代码可以画爱心?先来一张效果图来看看效果吧! 用python代码画爱心的思路是怎样的? 1.怎么画心形曲线 2.怎么填满心 ...
- python画菊花_网传“菊花厂月薪13K”15道硬核Python面试题,值得一看!
见过面试题也不少了,总之了一句话:面试前备好功课,面试中临危不乱,面试后谦虚有礼!这只是我本人总结的一些面试三要素,需要的可以参考参考,话不多了,今天为大家找了网传菊花厂比较硬核的15道面试题,希望能 ...
- python 释放内存_学了4年C++后,我转向了Python
作者 | asya f 编译 | Lisa C++ 已经学不动了,现在换 Python 还来得及吗?一位四年工作经验的 C++ 程序员亲述转型历程,这不仅仅是语言上的转变,而是代码思维甚至工作环境的转 ...
- 如何用python做俄罗斯方块_你的童年有俄罗斯方块吗?教你用 Python 实现俄罗斯方块!...
是为数不多的游戏类电子产品,对小孩子更是有着不可抗拒的魔力,在当时如果哪个小孩买了一个小游戏机,大伙一定迅速围上去- 俄罗斯方块作为其中一款小游戏,尽管规则简单.只有黑白双色,但其对当时游戏玩家的影响 ...
- python本科生就业_准备报学习机构学习大数据、Java或者python,是计算机专业的本科生,请问选择哪种就业发展比较好?...
谢邀.对比java和python后者还算是小语种.不知道楼主的具体情况如何.根据个人情况,建议先学java,毕竟你目前的需求是尽快找到更合适的技术工作,java择业面相对较宽,虽然也难学,但学习资源丰 ...
- python 取反_自从用了这招pandas 空数据处理方法,python编程速度提升了不少
今天为大家带来的内容是:自从用了这招pandas 空数据处理方法,python编程速度提升了不少 文章内容主要介绍了pandas 空数据处理方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工 ...
最新文章
- 02 数据类型 (向量 数据框 矩阵和列表
- CVPR 2020 | 腾讯优图17篇论文入选,含类比学习、人脸识别、物体检测、行人重识别等领域...
- springBoot(19):定时任务
- python统计分析---6.主成分分析
- Variant 数组
- HDU1418 抱歉【数学】
- html css js介绍ppt,HTML+CSS+JS-入门基础.ppt
- 身份证前6位匹配户籍地址对应的数据地区sql脚本(里面包含json版本的)
- 秋天视频批量生成GIF V1.32
- VS2017生成可执行程序,执行提示“不是有效的win32应用程序”
- 新能源行业商业采购协同系统:赋能新能源行业采购业务,提升产业协同
- 带你学开源项目:RxLifecycle-当Activity被destory时自动暂停网络请求
- 恢复W ndows10系统方法步骤,教你windows10的映像文件还原系统
- 航班管理系统-机票预订
- POJ 3691 AcWing 1053 修复DNA
- 重新定义超频 解读NVIDIA的Shader频率
- Java培训机构之我见
- 华为发布BB智能观影产品:Vision Glass
- 数据分析师的就业前景和薪资待遇如何?
- 一文详细了解针对蓝牙智能应用的超低功耗无线MCU芯片CC2640
热门文章
- Bootstrap的x-editable行编辑
- eclipse全局搜索_Eclipse如何进行全局搜索和单页面搜索?
- abaqus的python安装文件在哪_python、abaqus执行脚本路径
- pythontkinter在一块区域中绘图_用Python中的tkinter模块作图(续)
- java批量生成订单号_【笔记6-支付及订单模块】从0开始 独立完成企业级Java电商网站开发(服务端)...
- 【Java】14 JDBC编程学习总结
- Scala,Spark和IDEA学习笔记
- ?线程池为什么可以复用,我是蒙圈了。。。
- 微信公众号支付开发全过程(java版)
- svn教程----示例二:测试人员拥有读权限