(本文未经许可禁止转载)

           

艺术不是享乐、安慰或娱乐;艺术是一桩伟大的事业。艺术是人类生活中把人们的理性意识转化为感情的一种工具。——列夫·托尔斯泰

效果预览

考虑到网站性能,下面效果仅显示前50个圆,有950个圆被隐藏
观看完整效果请前往这里,滑至界面最下方点击RunPlay




用到的工具

三次贝塞尔曲线构造函数

f(t)=\alpha_1(1-t)^3+3\alpha_2(1-t)^2t+3\alpha_3(1-t)t^2+\alpha_4t^3
\alpha_1,\alpha_2,\alpha_3,\alpha_4\in \mathbb{C}
\\
t\in[0,1] 

拟合函数

F(t)=...+c_{-2}e^{-2it}+c_{-1}e^{-1it}+c_{0}e^{0it}+c_{1}e^{1it}+c_{2}e^{2it}+... 
c_m=\frac{1}{2\pi}\int_{0}^{2\pi}f(t)e^{-mit}dt .

我们的目标

其中计算出来的数列将c_m作为最终的输出数据.我们的工作是求 c_m .
说明:
根据2,我们发现要拟合的目标函数仅有t一个自变量.我们又知道:

a_{m,n,\alpha,\beta}:=\frac{1}{2\pi}\int_{\alpha}^{\beta}(\frac{t-\alpha}{\beta-\alpha})^ne^{-mit}dt,n\in\left\{ 0,1,2,... \right\} 

的解析值可简单求出.
(其中 (\frac{t-\alpha}{\beta-\alpha}) 是把t的范围从[α,β]映射到[0,1]α,β分别是当前贝塞尔构造函数定义域的下确界和上确界)
因此,仅需要确定数列c_m 和数列 a_{m,n,\alpha,\beta} 之间的关系即可.这可以通过对2关于t进行降幂排序、并将结果的t的某次方替换成a_{m,n,\alpha,\beta}得到,进而确立c_ma_{m,n,\alpha,\beta}的关系.

计算

对2关于t进行降幂排序得到:

f(t)=(-\alpha_1+3\alpha_2-3\alpha_3+\alpha_4)t^3+3(\alpha_1-2\alpha_2+\alpha_3)t^2+3(-\alpha_1+\alpha_2)t+\alpha_1

设:有 n_b 段贝塞尔曲线、 F(t) 的周期为.
F(t) 是一个被分成n_b段的分段函数,周期是.我们将每一段函数分开求c_m并加和,即可得到最终数据.
接下来开始正式计算,先计算a_{m,n,\alpha,\beta}的迭代公式.

I_n := a_{m,n,\alpha,\beta} 

经过对上式进行分部积分法可以得到:

I_n = \frac{i}{2\pi m}e^{-im\beta}-\frac{ni}{(\beta-\alpha)m}I_{n-1},n=1,2,3,4,... 
I_0 = \frac{i}{2\pi m}(e^{-im\beta}-e^{-im\alpha}). 

利用这个迭代式,我们可以求出所有贝塞尔弧段对应的

a_{m,n,\alpha,\beta} .

这里我们再设一个数列 \left\{ w_n \right\} 用来存储(\frac{第n段曲线到第1段曲线的长度的和}{全部曲线长度之和})的值,并且令 w_0=0 .
把每一小段分开求并加和,可得:

c_m = \\
\sum_{k=1}^{n_b}[(-\alpha_1+3\alpha_2-3\alpha_3+\alpha_4)a_{m,3,w_{k-1},w_k} \\
+3(\alpha_1-2\alpha_2+\alpha_3)a_{m,2,w_{k-1},w_k} \\
+3(-\alpha_1+\alpha_2)a_{m,1,w_{k-1},w_k} \\
+\alpha_1a_{m,0,w_{k-1},w_k}].

最后,将获得的复数列 c_m转换成二维点列并写入本地即可.

总结

通过上面的计算过程,不难发现,只要能表示成关于时间t的映射 f:\mathbb{R}\rightarrow \mathbb{C} ,都可对其进行降幂排序,将 t^n 替换成 a_{m,n,\alpha,\beta} 得到相应的输出数据 c_m .

       

(本文未经许可禁止转载)

   

发表回复