javascript动画基础(二)--三角学在动画中的运用(1)

要做动画,三角函数是必须的,好吧,如果你忘记了一大堆的三角函数的转换公式,无所谓,在动画中,我们用到的三角函数其实最多的还是sin和cos,偶尔会用到tan,但是不多,反而javascript提供的Math.atan2(y,x)这个函数,我们会多次用到,所以请放心,你需要掌握的三角函数也就这几个,当然还有些基础知识偷笑

1. 弧度和角度

90°是多少,45°,180°这些角度在我们日常文化中已经形成的常态,现在大家一说都知道大概是多少的角度,不过在衡量角的大小的时候,计算机更倾向于弧度

一弧度大概是57.2958°,怎么来的?一个完整的圆---360°,那还记得高中的公式么?360等于多少,对的,2π,那么π呢?对的,π≈3.1415926,所以,360°≈6.2832弧度,有了这个推算,那么180°是π,90°是π/2相信大家都能推算出来是多少弧度了。当然不需要过多的去推算这些,大家只需要知道在javascript中要使用的度数我们都应该转换为弧度就ok了,所以这里直接给出弧度和度数的转换公式:

radians = degrees * Math.PI / 180;  //角度转弧度
degrees = radians * 180 / Math.PI;  //弧度转角度

2. 笛卡尔坐标与canvas坐标

canvas画布的坐标系和计算机坐标系一样,以左上角为原点(0,0),这里给出图形,相信大家都比较清楚计算机坐标系的正负关系,向右为正,向左为负,向下为正,向上为负,而角度也是一样的正负原理



3. 三角函数回顾


上面的图,大家不用觉得太烦,暂时只需要掌握sin,cos,tan就已经足够了。

但是上面的图和公式对我们有什么作用呢?现在来做一道简单的数学题:

已知:斜边 h = 2,角度 A=30°,那么能不能求得邻边b和对边a的值呢?
当然可以,直接用三角函数公式不就行了吗?

a = Math.sin(A*Math.PI/180)*h; //sin,cos函数需要将角度转化为弧度
b = Math.cos(A*Math.PI/180)*h;

那么,这里的a和b不是正好对应了坐标的y轴和x轴的值吗?我们需要的这个坐标点不就出来了吗?

干说没意义,还是直接上一个简单的例子,为了简化代码和操作,所有的javascript动画都会使用HTML5的画布canvas来实现

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
		<style>
		div{
			padding: 20px 10px;			
			border:1px dashed #ccc;
		}
		canvas{
			margin: 20px;
			background-color: #eee;
		}
	</style>
</head>
<body>
	<div>
		请输入圆的中心点-X: <input type="number" min=100 max=400 value=100 id=originX /> <br>
		请输入圆的中心点-y: <input type="number" min=100 max=400 value=100 id=originY /> <br>
		请输入圆的半径-r: <input type="number" min=50 max=100 value=50 id=radius /> <br>
		<input type="button" value="显示" id="showBtn" />
	</div>
	<canvas id="myCanvas" height=500 width=500></canvas>

</body>
<script>
window.onload = function(){
	var originX = document.getElementById('originX');
	var originY = document.getElementById('originY');
	var radius = document.getElementById('radius');
	var showBtn = document.getElementById('showBtn');
	var canvas = document.getElementById('myCanvas');
	//画布获取上下文
	var ctx = canvas.getContext('2d');

	showBtn.addEventListener('click',function(){
		//清空画布
		ctx.clearRect(0,0,canvas.width,canvas.height);
		var x=y=0;
		//获取原点位置
		var ox = parseInt(originX.value) || 250;
		var oy = parseInt(originY.value) || 250;
		var r = parseInt(radius.value) || 100;	//获取半径

		ctx.beginPath();
		for(var i=0;i<=360;i++){
			//斜边 * cos = 邻边
			x = Math.cos(i * Math.PI / 180) * r;
			//斜边 * sin = 对边
			y = Math.sin(i * Math.PI / 180) * r;

			ctx.lineTo(ox + x, oy + y);
			ctx.stroke();
		}
	},false);
}
</script>
</html>
上面的代码很简单,就是画一个圆,注意循环的部分,其实就是从0°循环到360°,由于我们只是知道半径,那么这个半径就可以看作三角形的斜边,通过不断循环变化的角度,得到x,y的坐标,不知道怎么得出结论的?仔细研究一下,下面的图









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值