js 斐波那契数列的获取和曲线的实现(每日一更)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html" />
<meta name="keywords" content="不用临时变量进行两个值的变换" />
<meta name="description" content="不使用临时变量进行两值的变换" />
<meta name="author" content="KG" />
<title>不是用临时变量,进行两个值的交换</title>
<link rel="shortcut icon" href="favicon.icon" />
</head>
<body>
<canvas></canvas>
<script>
// 不用临时变量进行两个值的变换
function swap(a, b) {
a = a + b;
b = a - b;
a = a - b;
console.log(a, b)
}
swap(4, 5); // 斐波那契数列的获取,长度为11个;
function fiboArr(len) {
let fiboArr = [];
for (var i = 0; i < len; i++) {
if (i <= 1) {
fiboArr.push(i);
} else {
fiboArr.push(fiboArr[i - 1] + fiboArr[i - 2]);
}
}
return fiboArr;
}
console.log(fiboArr(11)); // 斐波那契曲线
let canvas = document.getElementsByTagName('canvas')[0]
canvas.width = 600
canvas.height = 480
let coor = {
x: 300,
y: 240,
}
//先取背景图中的中间点作为一开始的圆点 let ctx = canvas.getContext('2d')
//获取该canvas的2D绘图环境对象 /*
绘制曲线方法
@param prevR 这是斐波那契数列中前一位的数值,也就是上一截曲线的半径
@param n 这是斐波那契数列中的下标
@param r 这是斐波那契数列当前下标的值,也就是将画曲线的半径
*/ /*圆心变化规律
ctx.arc(300, 240, 5, Math.PI, 0.5 * Math.PI, true);//1
ctx.arc(300, 235, 10, Math.PI * 0.5, 0, true);//2
ctx.arc(295, 235, 15, 0, Math.PI * 1.5, true);//3
ctx.arc(295, 245, 25, Math.PI * 1.5, Math.PI, true);//4
ctx.arc(310, 245, 40, Math.PI, Math.PI * 0.5, true);
ctx.arc(310, 220, 65, Math.PI * 0.5, 0, true);
ctx.arc(270, 220, 105, 0, Math.PI * 1.5, true);
ctx.arc(270, 285, 170, Math.PI * 1.5, Math.PI, true);
*/ function draw(prevR, n, r) {
let radius = r * 5
//五倍半径画,不然太小了 let startAngle = Math.PI
let endAngle = Math.PI * 0.5
//每个半径只画1/4个圆,所以开始角度和结束角度刚好相差 1/4 * PI let anticlockwise = true
//设置为逆时针方向画 //改变圆点坐标、开始角度和结束角度
//第三个元素的圆点坐标、开始角度和结束角度上面已经给出,所以从第四个元素开始改变圆点坐标、开始角度和结束角度,也就是从n > 2开始
if (n > 2) {
//下面坐标的改变可以参考上面的图和直接用canvas画的代码。
switch (n % 4) {
case 0:
coor.x = coor.x + (5 * prevR) - radius
startAngle = 0
endAngle = Math.PI * 1.5
break;
case 1:
coor.y = coor.y - (5 * prevR) + radius
startAngle = Math.PI * 1.5
endAngle = Math.PI
break;
case 2:
coor.x = coor.x - (5 * prevR) + radius
startAngle = Math.PI
endAngle = Math.PI * 0.5
break;
case 3:
coor.y = coor.y + (5 * prevR) - radius
startAngle = Math.PI * 0.5
endAngle = 0
break;
}
}
ctx.beginPath();
ctx.arc(coor.x, coor.y, radius, startAngle, endAngle, anticlockwise);
ctx.lineWidth = 1;
ctx.strokeStyle = '#000';
ctx.stroke();
}
//获取斐波那契数列
function getFibonacci(n) {
let arr = []
let i = 0
while (i < n) {
if (i <= 1) {
arr.push(i)
} else {
arr.push(arr[i - 1] + arr[i - 2])
}
i++
}
return arr
}
let fibonacci = getFibonacci(10);
for (let i = 0; i < fibonacci.length; i++) {
//从第三个元素开始画,符合斐波那契数列的规律
if (i >= 2) {
draw(fibonacci[i - 1], i, fibonacci[i])
}
}
</script>
</body>
</html>
js 斐波那契数列的获取和曲线的实现(每日一更)的更多相关文章
- js 斐波那契数列(兔子问题)
对于JS初学者来说,斐波那契数列一直是个头疼的问题,总是理不清思路. 希望看完这篇文章之后会对你有帮助. 什么是斐波那契数列 : 答: 斐波那契数列,又称黄金分割数列.因数学家列昂纳多·斐波那契(Le ...
- js斐波那契数列
斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89...... 这个数列从第3项开始,每一项都等于前两项之和. 1.递归算法: function ...
- 斐波那契数列中获取第n个数据值
class Fibonacci { /** * Description:迭代方法获取fibonacci第n项数值 * * @param int $n * @return int */ public s ...
- js斐波那契数列求和
一.递归算法 function recurFib(n) { if (n < 2) { return n; } else { return recurFib(n-1) ...
- 斐波那契数列公式算法-JS实现
之前算斐波那契数列都是算前两个数相加实现的 比如0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181 ...
- javascript . 03 函数定义、函数参数(形参、实参)、函数的返回值、冒泡函数、函数的加载、局部变量与全局变量、隐式全局变量、JS预解析、是否是质数、斐波那契数列
1.1 知识点 函数:就是可以重复执行的代码块 2. 组成:参数,功能,返回值 为什么要用函数,因为一部分代码使用次数会很多,所以封装起来, 需要的时候调用 函数不调用,自己不会执行 同名函数会覆盖 ...
- js算法集合(二) javascript实现斐波那契数列 (兔子数列)
js算法集合(二) 斐波那契数列 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列进行研究,来加深对循环的理解. Javascript实 ...
- Tips_of_JS 之 利用JS实现水仙花数的寻找与实现斐波那契数列
一.水仙花数 1.啥是水仙花数? 水仙花数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153) 2.利用JS实现对水 ...
- 太原面经分享:如何用js实现返回斐波那契数列的第n个值的函数
面试攒经验,let's go! 值此高考来临之际,闲不住的我又双叒叕出发去面试攒经验了,去了公司交待一番流程后,面试官甩给了我一张A4纸,上面写着一道js算法笔试题(一开始我并不知道这是在考察js算法 ...
随机推荐
- python学习第四天:python基础(字符编码和乱码到底咋回事儿)
字符编码 这得从字符编码开始说起: 字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题.因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理. 最早的计算机在设计时采 ...
- 主流的 API 架构
1. RPC:调用另一个系统的函数 2. SOAP:使数据作为服务可用 3. REST:使数据作为资源可用 4. GraphQL:仅请求所需要的数据 1. RPC:调用另一个系统的函数 远程过程调用是 ...
- 第十九个知识点:Shamir密钥交换场景
第十九个知识点:Shamir密钥交换场景 Shamir密钥交换场景是一个被Adi Shamir提出的算法.算法允许多方分割一个密码,例如一个密钥.当足够多的秘密结合起来,整个密钥就被计算出来了. 正式 ...
- Product Integration
目录 生存模型 连续情形 离散情形 统一 Richard D. Gill, Product integration 一般的积分是指黎曼积分, 其计算是把区域无限细分求和并取极限, 有另外一种积分是把区 ...
- matplotlib 高阶之path tutorial
目录 Bezier example 用path来画柱状图 随便玩玩 import matplotlib.pyplot as plt from matplotlib.path import Path i ...
- .Net Core 3.1 WebApi发布到IIS
安装.Net Core 3.1 运行时环境 1.官网地址https://dotnet.microsoft.com/download/dotnet,选择要下载的运行时版本(.Net Core 3.1), ...
- JUC之多线程锁问题
多线程锁 8种问题锁状态: 该部分全部围绕的是以下内容并结合相应的例子:synchronized实现同步的基础:Java中每个对象都可以作为锁. 具体表现为以下三种形式:(之前只是简单的了解) 对于普 ...
- select 1 from 是什么意思?有什么作用?
参考:https://www.douban.com/note/518373959/ 一.select 1 from 的作用1.select 1 from mytable 与 select anycol ...
- sqoop的使用之import导入到HDFS
原文链接: https://www.toutiao.com/i6772128429614563843/ 首先我们已经安装好sqoop了,如果没有安装好参考文档<快速搭建CDH-Hadoop-Hi ...
- Centos安装DenyHosts
一.背景 个人申请的腾讯云主机被扫描端口,数百次登录失败的尝试 解决方法:安装工具,记录并屏蔽恶意访问. 二.检查环境 系统安装的sshd是否支持tcp_wrappers(默认都支持) ldd /us ...