当前位置:网站首页>【斐波那契数列及螺线 基于C语言】
【斐波那契数列及螺线 基于C语言】
2022-07-26 22:50:00 【清风清晨】
斐波那契数列及螺线 基于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 <graphics.h>
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,感谢作者提供的画图模块。斐波那契螺线画完后,就像一只蜗牛。
以下是分析的草图,有点儿乱。
边栏推荐
- 最新京东短信登录+傻妞机器人保姆级部署教程(2022/7/24)
- 求解100~200之间的素数
- 打开编程的大门
- 记录第N次SQL异常
- 多线程中 synchronized 锁升级的原理是什么?
- Detailed source code of golang bufio reader
- Influence of pre frequency division value and automatic reload value on interrupt frequency
- 三个整数从大到小排序(详细介绍多种方法)
- NB-IOT接入云平台
- Wechat applet: user wechat login process (attached: flow chart + source code)
猜你喜欢

About unsafe problems such as fopen and strError encountered in vs2022 or advanced version running environment

动态路由配置

Codeforces Round #807 (Div. 2), problem: (C) Mark and His Unfinished Essay

NAT network address conversion experiment

C语言——数据类型、基本数据类型的取值范围

(CF1691D) Max GEQ Sum

记录第N次SQL异常

HCIP-第六天-OSPF静态大实验

NAT网络地址转换协议-拓扑实验

通过ensp让静态路由实现全网可达
随机推荐
数字集成电路:MOS管器件章(一)
CF 1333C Eugene and an array
Hcip day 1
[C language] factorial implementation
Codeforces Round #796 (Div. 2), problem: (1688C) Manipulating History
Esp8266wi fi data communication
【你了解Cache吗——全面理解高速缓冲存储器】
(超详尽版,不懂随时评论)Codeforces Round #804 (Div. 2)C The Third Problem
On the first day of staying in the blog [for 80000]!
Golang -- parse yaml file
OSPF路由信息协议-拓扑实验
HCIP第一天
Use of golang - sync package (waitgroup, once, mutex, rwmutex, cond, pool, map)
求解整数的每一位
有趣的C语言
Error handling in golang
CF 1333C Eugene and an array
RIP路由信息协议-拓扑实验
First acquaintance with C language (1)
在有序数组找具体某个数字