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

           

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

效果预览

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




用到的工具

三次贝塞尔曲线构造函数

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

拟合函数

F(t)=...+c2e2it+c1e1it+c0e0it+c1e1it+c2e2it+...cm=12π02πf(t)emitdt.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 .

我们的目标

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

am,n,α,β:=12παβ(tαβα)nemitdt,n{0,1,2,...}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\} 

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

计算

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

f(t)=(α1+3α23α3+α4)t3+3(α12α2+α3)t2+3(α1+α2)t+α1f(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

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

In:=am,n,α,βI_n := a_{m,n,\alpha,\beta} 

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

In=i2πmeimβni(βα)mIn1,n=1,2,3,4,...I0=i2πm(eimβeimα).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}). 

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

am,n,α,β.a_{m,n,\alpha,\beta} .

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

cm=k=1nb[(α1+3α23α3+α4)am,3,wk1,wk+3(α12α2+α3)am,2,wk1,wk+3(α1+α2)am,1,wk1,wk+α1am,0,wk1,wk].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}].

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

总结

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

       

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

   

发表回复