栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【斐波那契数列及螺线 基于C语言】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【斐波那契数列及螺线 基于C语言】

斐波那契数列及螺线 基于C语言

斐波那契数列:fn = f(n-1)+f(n-2),(n>=3),f1=1,f2=1
用语言描述,就是任何一项都是前面两项的和,第一项是1,第二项是1,第三项开始,每一项都是前面两项的和。
fn=1,1,2,3,5,8,13,21,34,55,89,144,233…
斐波那契数列也叫黄金分割数列。

斐波那契螺线

斐波那契螺线如下图:

一、斐波那契螺线是什么?

如上图所示:斐波那契螺线是由直线和圆弧组成的。圆弧的半径依次是1,1,2,3,5,8,13…
也就是圆弧的半径依次是斐波那契数列的每一项,直线是以原心开始,以圆弧的半径为长度,连接圆心和圆弧起点的直线,直线的方向依次为:右、上、左、下、右、上、左、下、右…
也就得出:
第n=0项直线往右:如果直线的起点是(500,500),以10个像素为一个单位的话,直线的终点是(510,500),圆弧的圆心是(500,500),圆弧的起始角度是0度,终止角度是90度,半径是10;
第n=1项直线往上:直线的起点是(500,500),终点是(500,490),圆弧的圆心是(500,500),圆弧的起始角度是90度,终止角度是180度,半径是斐波那契数列的第二项1(此处为10,因为10个像素代表1)
第n=2项直线往左:直线的起点是(510,500),直线的终点是(490,500),圆弧的圆心是(510,500),起始角度是180度,终止角度是270度,半径是斐波那契数列的第三项2(此处为20)
第n=3项直线往下:直线的起点是(510,490),直线的终点是(510,520),圆弧的圆心是(510,490),圆弧的起始角度是270度,终止角度是360度,半径是斐波那契数列的第三项3(此处为30)
第n=4项直线往右:直线的起点是(490,490),直线的终点是(540,490),圆弧的圆心是(490,490),圆弧的起始角度是360度,终止角度是450度,半径是斐波那契数列的第四项5(此处为50)
…
以此类推
第n=n项:如果n % 4 = 0 ,则直线往右,直线的起点是(上一项的横坐标减去f(n-2),上一项的纵坐标),直线的终点是(上一项的横坐标加上f(n-1),上一项的纵坐标),圆弧的圆心是直线的起点,圆弧的起始角度是90n度,终止角度是90(n+1)度,圆弧的半径是斐波那契数列的第n项 f(n).
如果n % 4 = 1 ,则直线往上,直线的起点是(上一项的横坐标,上一项的纵坐标加上f(n-2)),直线的终点是(上一项的横坐标,上一项的纵坐标减去f(n-1)),圆弧的圆心是直线的起点,圆弧的起始角度是90n度,终止角度是90(n+1)度,圆弧的半径是斐波那契数列的第n项f(n).
如果n % 4 = 2,则直线往左,直线的起点是(上一项的横坐标加上f(n-2),上一项的纵坐标),直线的终点是(上一项的横坐标减去f(n-1),上一项的纵坐标),圆弧的圆心是直线的起点,圆弧的起始角度是90n度,终止角度是90(n+1)度,圆弧的半径是斐波那契数列的第n项f(n).
如果n % 4 = 3,则直线往下,直线的起点是(上一项的横坐标,上一项的纵坐标减去f(n-2)),直线的终点是(上一项的横坐标,上一项的纵坐标加上f(n-1)),圆弧的圆心是直线的起点,圆弧的起始角度是90n度,终止角度是90(n+1)度,圆弧的半径是斐波那契数列的第n项f(n).

二、代码如下

#include

int main()
{
initgraph(1000, 1000);
setbkcolor(WHITE);
setcolor(BLACK);
int x = 500, y = 500, x1 = 510, y1 = 500;
int a = 0, b = 10, c = 0;
for (int n = 0; x >= 0 || y >= 0; n++)
{
line(x, y, x1, y1);
arc(x, y, 90 * n, 90 * (n + 1), b);
x1 = x;
y1 = y;
switch (n % 4)
{
case 0:
y = y + a;
y1 = y1 - b;
break;
case 1:
x = x + a;
x1 = x1 - b;
break;
case 2:
y = y - a;
y1 = y1 + b;
break;
case 3:
x = x - a;
x1 = x1 + b;
break;
}
c = a + b;
a = b;
b = c;
}
getch();
closegraph();
}

总结

这里用到了EGE画图模块,全称是Easy Graphics Engine,感谢作者提供的画图模块。斐波那契螺线画完后,就像一只蜗牛。
以下是分析的草图,有点儿乱。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1010074.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号