用傅里叶级数大轮套小轮画任意函数曲线(2)

3. 画函数曲线,效果

在这一部分中,我们将做出结果如下面的效果图所示。使用的工具是 geogebra。可能需要Excel,并非必需。

用傅里叶级数5级“拟合”类似三角波的函数图形。这个函数是随便选的,在后文中能看到,改变成其他函数图形很容易就能能画出来。

在效果图中,紫色的是待“拟合”的函数,上面的深紫色点代表傅里叶级数之和在函数上的位置。傅里叶5个级数的圆,分别用 红、橙、黄、绿、蓝 表示,圆周上的点与当前级别的圆同一颜色。

5个圆间具有如下关系。

第1个圆上的点是第2个圆的圆心,
第2个圆上的点是第3个圆的圆心,
第3个圆上的点是第4个圆的圆心,
第4个圆上的点是第5个圆的圆心。

连接蓝点和紫点的水平虚线,其目的是为了能更方便观察大轮套小轮的结果与待拟合函数一致。

严格的说,紫色图形并非待“拟合”的函数,而是拟合的结果。待拟合的函数如下图所示。能够看出下图中的波形与紫色波形之间相似。

3.1 变量

共有3种变量。

第一种变量是 t,即 omiga t 中的 t,自变量,角度。定义如下。

设置为 slide,显示在屏幕上,自动播放。

第二种变量是 d1~d5,分别对应红圆到蓝圆的5个半径。

第三种变量是 theta1~theta5,分别分对红圆到蓝圆的5个初始相位。

在Excel中根据待求数的波形,得到d1~d5和theta1~theta5,如下。

把d1~d5和theta1~theta5的值从Excel抄到 geogebra。

以上,共11个变量,我放在了 Layer 0。

3.2 圆周和圆周上的点

第1个级别的圆周c1和圆周上的点a1分别定义如下,放在了 Layer 1中。

其中圆周c1的圆心为原点(0,0),是固定值;半径为第1级数的系数d1,在变量中定义了。

圆周上的点a1,其横坐标为在 半径d1 乘以 cos( 自变量t + 初始相位角theta1)。纵坐标原理类似。

除第1级数以外,其余的4个级数有相似的规律。以级数3为例,我把圆周和圆周上的点放在了 Layer 3中。

其中c3是圆周,(1)以前一级数的圆周上的点a2作为圆心,(2)半径为本级数的系数d3。除第1级数以外,其余的4个级数的共同规律是 圆周的圆心都是前一级数圆周上的点,半径为当前级数的系数d_k。

这里a4是第3级数圆周上的点,其横坐标为 在前一级数圆周上点a2的横坐标的基础上偏移 半径d3 乘以 cos( 自变量t + 初始相位角theta3)。除第1级数以外,其余的4个级数的共同规律是 横坐标都在前一级数的圆周上的点a_(k-1) 的基础上偏移,偏移量为 cos( 自变量t + 当前级数初始相位角theta_(k-1))。纵坐标有类似规律。

在下图的示例中,黄色3代表当前级数,红色2代表前一级数。

这样,就得到了以下元素,如下图所示。

5个圆的半径

5个圆的圆心

5个圆上的点

这是整个项目的核心部分。

3.3 作为背景对比的函数图像

声明如下函数。

每个级数都有 d_k*sin(x+theta_k)组成,这5个级数累加之和为f(x).

设置为紫色,得到了下图,与此前的5个圆叠印在屏幕上。

函数上的点,按下图定义。

其中的t即此前声明的变量t。

设置为紫色,如下图所示,红色箭头所指 紫色曲线上的点。

水平线,按下图定义。

设置线型为虚线,减小粗细,如下图红色箭头所指处。

水平虚线指示函数上的点的纵坐标。

3.4 大轮套小轮-函数曲线横向展开,对比

这一小节只包含解读,不是步骤之一。

水平虚线的纵坐标,与5个圆中第5级数圆周上的点的纵坐标,与函数上的紫色点的纵坐标,三者在动图中始终保持一致。如下图中的4个子图分别所展示的,函数曲线上的紫色点纵坐标始终与第5个圆周上的蓝色点始终保持相同。

 

因此左侧大轮套小轮的5个圆 与 右侧函数曲线的横向展开 是一致的。

4. 极坐标形式-原位轨迹跟踪

在变量t的settings中,设置增量和重复的方式,这样较易观察到现象。

按t的播放按钮。

得到下图,第5级数所刻画出的极坐标形式点的轨迹。这条轨迹沿x轴展开,对应紫色的函数曲线。如果我们站在原点(0,0)位置向外看,这颗在 均轮-本轮 上的蓝色星球,它所运行的轨迹时快时慢。

我们大胆地修改d1为更小的值,例如d1=2.053836824,可以得到下图。

两个红色箭头所指的地方,站在原点(0,0)看来,星球在自东向西(在北半球向南天看,即顺时钟)运行时,突然回头改为自西向东(逆时钟),过了一段时间,又恢复为自东向西(顺时钟)。可能,古人就会震惊这颗星球轨迹奇异,显然不是运行在球形天穹上,把它命名为荧惑吧。在右上角附近,还能看到这颗星球会停下来几天,是在等候什么大事发生?

5换个函数

我们很容易就能换个函数图像来画,例如下面的波形。

用Excel求得傅里叶系数如下。

把上述系数赋值到geogebra……

这个操作过于繁琐,我们想个快捷的办法。

复制上图,然后 选择性粘贴。先按 数值 粘贴,再 转置。得到箭头所指的区域。

复制箭头所指的区域,贴到记事本中,简单编辑,加等号得到下图。

再从记事本中复制,备用。

在Geogebra 中增加控件 按钮。

把caption改为“换函数”。

这个按钮的Settings | Scripting | On Click,把刚才从记事本中复制到的文字粘贴在这里。

关闭Settings,点击换函数,函数曲线以及系数更换完毕。下图中,左边是 geogebra中的效果,右边是Excel中原函数的曲线,差不多吧。

再换一个。

重复上述步骤,得到下图。

再换一个函数。

得到下图。

 

用傅里叶级数大轮套小轮画任意函数曲线(1)

在网上看到过图片系列,名字叫做 不需要文字的数学证明,或者叫做 怪不得我数学没学好 一类的。用静止图片或者动图展示数学原理。例如 用三角形边长构成正方形,灌上水,用水的体积用面积相等验证勾股定理;圆旋转,把圆周上的点沿横坐标延开演示正弦曲线的。印象挺深的一个动图,是用大圆上套小圆,三个圆吧,展示方波的傅里叶分解。感觉非常炫酷,值得照着做一个。

仿制的方法和过程如下,用 geogebra实现。个别细节需要Excel,并非必须也可以用其他工具代替。

最终效果大致如下面的效果图所示。

图中,要傅里叶分解画出的曲线是浅灰色的细线,大致呈现方波的形状。有3个圆,不同的半径(以及初始相位)“拟合”出方波。这三个圆从大到小,分别为 红色、绿色、蓝色。第一个即红色圆上的一点,作为第二个即绿色圆的圆心;第二个即绿色圆上的一点,作为第三个即蓝色圆的圆心。当红、绿、蓝三个圆按各自不同的固定周期旋转时,运动叠加的结果在横坐标上展开,刚好符合方波的函数图像。

这个 geogebra 项目完成后能够画出的任意函数图形,不止限于方波。

1. 需要的技术及原型

考虑效果图所呈现的元素,以及各元素间的关联,可以得出需要哪些geogebra中的技术。

最核心的效果,是一个绿圆上,以另一个红圆作为圆心。或者更完整的表述,应该是 一个绿圆上的点,以另一个红圆上的点作为圆心。这样,就能逐级完成傅里叶级数的累加。

我们从简单的开始,不需要 geogebra 基本也容易理解。如果某个技术不熟悉,也容易单独做个 geogebra 小项目测试一下。

1.1 第一个圆,指定圆心和半径

第一个圆分成两部分,一是 圆周,二是 圆周上的点。

圆周 的定义如下。

我们把圆心设置在原点 (0,0)位置,半径为r1。这样,就自动得到了变量r1,如下。我们随便设置半径r1的值,以后会经常调整它的值。

圆周上的点 定义如下。

横坐标为半径r1乘以角度alpha1的余弦值,

纵坐标为半径r1乘以角度alpha1的正弦值。

这正符合余弦和正弦在单位圆中的定义。

我们在圆周上的点的定义中使用了刚才定义的变量 半径r1,并且自动得到了另一个变量 角度 alpha1。角度的值在以后也会经常调整。

以上,由圆周和圆周上的点,我们得到了第一个圆。如下图所示。

1.2 行星轨道

通过下图中红箭头所指的单选按钮,把 r1 和 alpha1 的 滑动条slide 显示在屏幕上。在setting中可以指定slide的范围。

拖动 alpha1 或 r1,可以得到半径不同的圆,以及 不同角度的a1。如下图所示。

如果把原点视为太阳,c1是行星的轨道,a1是轨道上的行星。这个比喻有利于观看动图的人更易于理解我们的意图。

1.3 第二个圆

第二个圆也由两部分需要讨论,一是圆周,二是圆周上的点,如下图所示。

从上图可以看出,第一个圆的圆心有固定坐标(0,0),而第二个圆的圆心不是固定的。第二个圆的圆心是第一个圆圆周上的点a1,这个点a1受r1和theta1两个变量的影响。在最终的成品中,我们会注意到,不同的级别有不同的半径,并且演示傅里叶级数的过程中,角度是一直在变动的。

第二个圆的圆周,圆心是a1,半径是变量r2。

第二个圆的圆周的上的点,如下。

横坐标为 圆心a1的横坐标x(a1) 加上 半径r2 乘以 alpha2的余弦。同理,得到纵坐标。

1.4 卫星轨道

在以后的完整项目中,调整两个圆的半径,对应了傅里叶变换不同级数的系数Cn.在这里,可以手动调节r1和r2两个滑动条,查看c1和c2。下面的三张图,展示了不同半径对比,红圆的半径是r1,绿圆的半径是r2。

固定两个圆的半径,改变 alph1和alpha2的值,看动态效果,第二个圆的圆周上的点a2,像月亮/卫星围绕地球/行星a1旋转,a1绕太阳即原点旋转。

1.5 轨迹

点击alpha1和alpha2右侧的 播放 按钮;

在a2的settings里面选择 show trace。

可以画出a2(以极坐标形式)划出的轨迹。

这个轨迹,模仿了托勒密的本轮-均轮系统,想像一下你站在原点,观测到的紫色线条就是某颗轨道令人困惑的行星在夜空里划下的轨迹。

1.6 函数曲线

在用傅里叶级数大轮套小轮画任意函数图像的过程中,我们在背景叠印一张函数图像作为参照,看起来更直观一些。

假设 alpha1 与 alpha2 有函数关系,例如
alpha2=alpha1*2。

叠印的函数,即大轮套小轮傅里叶级数在横坐标上的展开,如下。

任意时刻a2点在函数图像上的位置B,如下。

与a2纵坐标相同,画一条水平直线。在settings中设置为虚线,细一些。这条直线连接了卫星a2和在函数上的点B。

以上三项,函数图像、函数图像上的点、alph2与alpha1的函数关系 设置完毕以后,图像如下。

点击alpha1的播放按钮,观察以上图像的动作,可以注意到,(1)a2与B总在同一纵坐标,(2)B始终在紫色的函数曲线上。

2. 求两个参数 半径dk 和 初始相位差thetak

利用上一节中技术原型中涉及到的 geogebra 方法 画任意函数曲线的大轮套小轮傅里叶展开,我们还需要傅里叶级数的正弦形式。

根据 https://zhuanlan.zhihu.com/p/654224439https://zhuanlan.zhihu.com/p/655415316

可以用Excel求得任意周期函数分解为傅里叶级数的 ak 和 bk.

又根据《信号与系统——使用MATLAB分析与实现》https://book.douban.com/subject/35627101/,有以下公式。

根据以上公式,可以由 ak 和 bk 求得 dk 和 θk。

其中dk为不同级数对应的圆的半径,θk为不同级数的初始相位角。

傅里叶级数表述为下述 正弦形式。

在Excel中,我们由上文中求得的 an 和 bn 求得 dk 和 θk。

在要拟合函数确定的前提下,傅里叶系数a1,a2……a5和b1,b2……b5已经求得。并且在Excel中傅里叶系数会随要拟合函数的变化而随时变化。

以d2为例,应用dk的公式,由b2和a2求得d2,得到下图。

以theta2为例,应用theta k公式,由b2和a2求得theta2。

这样,对于如下函数

可以得到d1~d5和theta1~theta5。

把d1~d5和theta1~theta5代入到上述傅里叶级数的正弦形式中,在Excel中就能得到下图中的右图。下图中的左图,是用an和bn即正弦和余弦均有的形式得到的,作为对比参考,它们完全相同。

(待续)

3. 画函数曲线

3.1 目标曲线

3.2 大轮套小轮-函数曲线横向展开

3.3 极坐标形式-原位轨迹跟踪

 

把照片加工成指定的宽高比例

1.要求和必要性

填表。填写有些表格是为了参加喜欢的会议,填写有些表格是被迫的,为了求生。有时还要填写各种汇总表格,这是希望我们站在更上位的角度上观察自己吧。

填表的时候,有时要提供照片。有时照片还要求指定的尺寸(包括文件大小,以字节为单位;也包括外观或打印的大小,以像素或厘米计算;有时包括DPI,每英寸的点数,清晰度)这些都容易用各种处理图片的工具加工,全自动的,指定参数就行。

以下面这张照片为例,摄于长春 世界雕塑公园入口。

偶尔照片要求宽高的比例,这说明接收照片的人是真的认真考虑问题了。因为如果不指定宽高比例,你提供的照片显示出来可能会横纵比例失真。像下面这样。

或者像下面这样。

对这一点我非常惊讶,在学校的毕业生照片收集系统里,在商场里面和外立面上播放的大屏幕上,经常有那人的横纵比例一看就不对。把16:9和4:3混淆的,更有甚者把新近的超宽的宽银幕播放在窄屏幕的。完全不顾及“锁定纵横比”这样的复选框,也不顾及观者的感受。我在练习画画的时候,对如何保证纵横比例一致相当苦恼,现在也没有找到好的办法,除了用铅笔测量长度。我希望更加精确,而不可得,难以理解别人是如何忍受这种程度失真的。

又或者,接收照片的人保证了比例,但是由于你提供的照片比例与系统打算用的不一致,所以就随便剪裁下来一块——而照片上哪里是重点,需要人类的参与才能体现意图。

下面这张

和下面这张

两张比例差不多,都是从原图上剪切下来一块,但是强调的重点,暂时还是由人类指定吧。

综上,要求为
(1)宽高比,有时2:3,有时4:5,有时3:4,等等;
(2)剪切的位置需要人工指定。

2. 工具

用 irfan view 容易处理。irfan view还可以用来看漫画,挺方便的。在这里 https://www.irfanview.com/ 下载。

3. 步骤

操作步骤如下。

(1)开始操作

Edit | Create custom slection…

(2)指定比例,可以指定宽和高的像素


通过Custom ration可以自定义比例,宽高之比可以用小数0.8或者分数4/5表示。上图中我选择了4:5表示宽高之比为4:5。

右侧的像素为按“Save and draw on image”后出现的提示框的默认大小。

提示框可以通过 鼠标右键移动位置,这样操作像素大小不变。

或者ctrl拖拽边缘,像素大小变化,纵横比例不变。

下图,我用鼠标右键操作提示框,移动了它的位置,没有改变它的大小。

(3)切去不要的部分

Edit|Crop selection(Cut out)

结果如下图所示,黑色背景是图片以外,是不存在的区域。

(4)保存

此时可以根据系统对图片字节尺寸的要求选择压缩比。

在文件资源管理器中看保存出的图片属性,宽高的像素以及比例符合期待。