斐波那契螺旋
在这个例子中,我们将介绍如何使用交互式脚本来方便地比较不同模型的结果–图形和指定为文本程序的结果。
我们将建立一个在斐波那契螺旋上生成点的图形模型,然后将得到的图形与计算黄金螺旋模型的结果进行比较。
研究对象
斐波那契螺旋是黄金螺旋的近似值。 它由比萨的莱昂纳多(绰号斐波那契)在1202周围描述。 它是使用由四分之三圆组成的分段线性曲线定义的。 每个四分之一圆的半径 它由形成着名的斐波那契序列的复发关系定义。:
哪里 .
(前两项0,1通常被丢弃,螺旋从第三项立即构建: 1, 2, 3, 5, 7...)
选择每个圆的中心以使螺旋保持光滑。 每个圆的中心的点可以从模型中获得 fibonacci_spiral_model.engee (信号 cx 和 cy)连同它们的半径(信号 r). 通过输出信号 x 和 y 我们将绘制斐波那契螺旋图。
模型的一般视图如下所示:
黄金螺旋
黄金螺旋使用单个指数函数在整个数字轴上定义。 使用数学表达式和图形模型设置此函数同样简单。 我们谈论的是一个对数螺旋,其基数是每半转 ,按值增加 . 这里 -黄金比例倒数的数字 .
我们将不得不使通常的对数螺旋方程复杂化。 . 重点是收敛点 斐波那契螺旋不位于原点,取决于斐波那契螺旋刻在矩形的大小。 要匹配两个螺旋,您还需要在黄金螺旋方程中输入非零初始旋转角度。 .
对于与斐波那契螺旋最大重合的黄金螺旋公式的推导,最好参考出版物[1]。 在这里,我们只给出极坐标的黄金螺旋的最终公式。:
哪里 -极坐标系中螺旋上点的一系列坐标, -斐波那契螺旋刻有矩形的宽度。
启动模型
让我们启动模型 fibonacci_spiral_model.engee 让我们分析一下结果。
modelName = "fibonacci_spiral_model";
model = modelName in [m.name for m in engee.get_all_models()] ? engee.open( modelName ) : engee.load( "$(@__DIR__)/$(modelName).engee");
这种设计允许我们检查模型是否由用户上传和打开(然后我们需要命令 open),或者您需要使用命令下载它 load.
运行模型非常容易:
s = engee.run( modelName, verbose=false )
输出对象 s 它包含表与那些信号,标记为"记录"在本模型(采用的图标 ).
结果分析
让我们选择一个绘制图形的环境。
gr() # 小尺寸静态图
# plotly()#按屏幕宽度显示的交互式图形
可视化一系列斐波那契数:信号 r. 该向量包含相当多的点,因为生成它们的模型具有低采样率。
plot( s["r"].time, s["r"].value, label="斐波那契数列", st=:stem )
# 为X尺度设置我们自己的签名
plot!( xticks=( range( minimum(s["r"].time), maximum(s["r"].time), step=1),
Int.(range( minimum(s["r"].time), maximum(s["r"].time), step=1))) )
建造黄金螺旋
正如我们所讨论的,为了构建与斐波那契螺旋相匹配的黄金螺旋,我们首先需要从已经构建的螺旋中获取几个参数。
theta = range( -0.8*pi, 12*pi, step=0.01); # 黄金螺旋定义的范围
λ = (sqrt(5)-1)/2; # 与黄金比例相反的数字
# 斐波那契螺旋被刻在矩形的尺寸
a = maximum(s["x"].value) - minimum(s["x"].value)
b = maximum(s["y"].value) - minimum(s["y"].value)
# 斐波那契螺旋中心的坐标
# -在这个矩形的坐标系中)
x = (1 - λ)/(2 - λ) * a
y = (1 - λ)/(2 - λ) * b
# -在图形的坐标系中
sx = minimum(s["x"].value) + x;
sy = maximum(s["y"].value) - y; # (注意y轴指向上方)
# 黄金螺旋相对于斐波那契螺旋的旋转角度
α = atan( 2*λ - 1 );
现在你可以计算出躺在黄金螺旋上的点的坐标。
# 金螺旋在极坐标系中的点
R = @. (a/(2 - λ)) * sqrt(1 + λ^6) * λ^((2/pi)*(theta+α))
# 笛卡尔坐标系中金色螺旋的点
x,y = R .* cos.( theta ) .+ sx, R .* sin.( theta ) .+ sy;
它仍然显示两个图形进行视觉比较。
plot( s["x"].value, s["y"].value, lc=:skyblue, aspect_ratio=:equal, lw=4, label="斐波那契螺旋" )
plot!( x, y, lc=:black, ls=:dash, label="黄金螺旋", legend=:topleft )
显然,这些模型非常匹配。
结论
我们使用Engee的基本块构建了一个近似黄金螺旋的数学模型。 然后,使用软件控制命令,我们可视化了几个信号,并将结果与黄金螺旋方程进行了比较。
连结:
[1]段J.S.黄金矩形、斐波那契螺旋和黄金螺旋的收缩点//自然界和社会中的离散动力学。 – 2019. -卷。 2019. -第1-6页。

