⽤python画叶⼦_今天学会傅⾥叶画画,明天就是初⾳未来-如python代码画图案
何⽤Python和Blend。。。
前⾔:
最近在【编程德鲁伊】的【傅⾥叶级数可视化】章节中,练习了傅⾥叶级数基础原理的可视化,演⽰了周期⽅波曲线,可以分解为⼀系列正
弦波曲线:
这次拿学到的知识做个实验,试试喜闻乐见的【⽤傅⾥叶级数画画】,并尽可能简单直观的解释⼀下原理。
⾃认为简单直观的原理解释
referenceerror未定义之前练习的可视化,都是在⼆维空间进⾏,例如正弦波:
⽅波(通过傅⾥叶级数):
图中左半边的圆周(Epicycle)和右半边正弦波/⽅波的关系:左半边是⼀个运动点,在⼀个圆周或多个
圆周组合上随着时间t转动;
右半边,是将时间t映射到横轴x轴上,纵轴仍是运动点当前的y值保持不变。
也就是说,把时间域转换为空间域,就能从⼀个圆周得到正弦曲线,或者从⼀系列圆周组合,得到⽅波曲线。
我们把⽅波可视化左右两边的运动点轨迹也画出来:
左半边由⼀系列圆周(Epicycle)组成的轨迹,与右半边的⽅波(Square)轨迹,其实只是同⼀个运动点在不同空间⾥的展现⽅式⽽已。
豁然开朗有没有(此处插⼊打赏掌声!)
为了说的更清楚⼀些,接下来把空间域从⼆维换到三维,时间t不再映射到x轴,⽽是映射到z轴上:
上图从正⾯看过去,仍是⼀个圆周,⽽在三维空间⾥旋转坐标轴,从侧⾯看过去时,它实际上就是⼀个正弦曲线。
⽅波的也⼀样:
南通java培训班正⾯的橙⾊轨迹,转换⾓度,从侧⾯看,就是⽅波的曲线。
再次豁然开朗有没有
进⼀步,根据傅⾥叶级数原理,为了得到⽅波(橙⾊),就要想办法得到组成⽅波的⼀系列正弦波(⾦黄⾊):
换⼀个视⾓,为了得到最终的运动轨迹(橙⾊),就要想办法得到组成轨迹的⼀系列Epicycle圆周(⾦黄⾊):
⽽这个橙⾊的运动轨迹,可以是各种形状,也就是说,⽆论想画什么图形,只要按照傅⾥叶级数的原理,到⼀系列Epicycle圆周,就可以画出来了!
⾦猪报喜
傅⾥叶本尊c语言从入门到精通答案
怎么样,这样去理解傅⾥叶级数画画的原理,是不是容易了⼀些?
接下来要解决的,就是如何为“任意”图案到对应的⼀组Epicycle圆周的问题。
从数学上讲,就是求傅⾥叶级数⾥每个⼦项对应的傅⾥叶系数(a和b):div居中怎么实现
各项系数a和b都到后,合起来就可以得到f(x)。
求傅⾥叶系数的⽅法有很多,积分、傅⾥叶变换等。
详细的原理推导,我还没有复习重修,所以对于如何把⼤象装冰箱的回答,仍然是:
1.打开冰箱门;
c++视频2.把⼤象装进去;
3.关门。
直接对图案轨迹进⾏傅⾥叶变换,即可得到傅⾥叶系数。
⽽在计算机程序⾥,所有的数据都是离散的,所以实际上程序⾥⽤的是离散傅⾥叶变换。
关于这个环节,参考资源较多,尤其是⽤Web前端/JavaScript/p5.js做的不少,列在后⾯。
本⽂的配图和动画,是⽤ Blender + Python 完成:
等等⽼乡,还没完。
从上图⾥傅⾥叶的配⾊就能看出,我其实原本是打算画 Miku 酱的(初⾳未来):
然⽽码到⽤时⽅恨不会,关于傅⾥叶画画这个问题,其实更难的是到合适的图案轨迹,并不是随便⼀个图都能轻松画出来的,这也是为什么上⽂中,我给任意图案的“任意”两字加了引号。
从数学上讲,在⼀些特定条件的约束下,⼀个函数才能⽤傅⾥叶级数来表达。
⽽出这个图案轨迹的过程,复杂度远超⽤傅⾥叶级数画轨迹本⾝。
后⾯将附上其他⾼⼈的⽂章供参考。
本⽂投⼊的精⼒仅能画简单的轨迹线,所以Miku就换成了傅⾥叶他⽼⼈家 :
最终效果(三个视⾓):
参考资源
Talk is cheap. Show me the code!
本⽂中提到的傅⾥叶级数基本原理可视化,⽂章可从菜单“笔记教程-编程德鲁伊”获得。
绝⼤部分开源在这⾥:
本⽂傅⾥叶画画的实验代码,可在知识星球中获取,感谢已经加⼊星球的朋友们。
在知识星球⾥你将持续获得实验代码和⽆限次答疑。
详情请点击:关于赞赏和内部知识星球。
请猛戳下⽅赞赏或喜欢作者,buy me a coffee!
您的⾦钱⿎励是我前进的动⼒。
/知乎专栏/知识星球:实验编程
Cheers~
Contra
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论