html5中三角函数,三角函数之箭头绘制-HTML应用

本文详细介绍了如何使用HTML5的canvas API来绘制箭头图形。通过三角函数计算直线旋转后的坐标,结合Math对象提供的数学函数,实现箭头的绘制。文章提供了具体的JavaScript代码示例,包括画线、计算角度、旋转坐标和绘制箭头的步骤,帮助读者理解并实现自定义的箭头图形。
摘要由CSDN通过智能技术生成

由于项目中需要采用html5绘制箭头,查阅所有的html5方法,发现只有lineTo方法,所以决定采用lineTo画线方法来绘制一条直线的箭头

箭头”–>”:是由一条直线向左右各旋转一个相同的角度就形成了箭头,这里我们需要计算直线旋转后的坐标,所以我们需要用到三角函数[三角函数:两条关联的直线(a,b)所形成的直角三角形中a与b的关系]如图所示

1 三角函数简介:

绘制直角三角形如图所示 a^2 +b^2 =c^2;

38e9fae292da07220bdb1679391cefdb.png

从图中我们可以看见角∠ACB,角∠ABC,角∠CAB

针对角A 我们来求三角函数的值

sin(A) = a/c

cos(A) = b/c

tan(A) = a/b;

cot(A) = b/a;

从上面的公式中我们可以看出 以上四个三角函数 相互的之间的关系为

tan =1/cot;

sin^2(A)+cos^2(A)=1;

sin(A) = [1-cos^2(A)]开方;

2 javascript中三角函数的方法简介?

Math.E 自然对数的底(为常数)2.718

Math.LN1010的自然对数2.302

Math.LN22的自然对数0.693

Math.PI圆周率3.1415

Math.SQRT1_21/2的平方根0.707

Math.SQRT22的平方根1.414

Math.sqrt(x)X的平方根更X的值有关

Math.pow(x, n)返回x的n次方的数值参数为x和n

Math.log(n)返回n的自然对数参数为n

Math.exp(n)返回e的n次方的数值参数为n

三角函数

Math.cos(x)X的余弦函数

Math.sin(x)X的正弦函数

Math.tan(x)X的正切函数

Math.acos(y)X的反余弦函数

Math.asin(y)X的反正弦函数

Math.atan(y)X的反正切函数

这里注意:参数x和以及反函数的返回数值的单位都为弧度(比如 PI弧度=180度)

舍入函数和随机数字

Math.random()产生从0到1的随机数

Math.round(x)取最接近整数x的数值

Math.floor(x)取最接近整数x并且比x小的数值

Math.ceil(x)取最接近整数x并且比x大的数值

Math.min(a, b, c)返回参数列表中最小的数值

Math.max(a, b, c)返回参数列表中最大的数值

3 绘制圆 根据直角的关系 介绍如何计算坐标,如何确定箭头

2ea463bc54d4004826127e7e15a9e392.png

根据上图的圆和三角函数知识,

首先我们绘制一条直线,然后将html5中对象的坐标系统(0,0)旋转的同绘制的直线在同一X轴上

如下图代码:

< !DOCTYPE html >

< html>

< head>

< script type="text/javascript" >

function drawLineAndArrow(divId,ox,oy,startX,startY,endX,endY)

{

//参数:divId的 id ox,oy原点坐标 startX,startY开始坐标 endX,endY线终止坐标

var start= new Array(startX,startY);

var end= new Array(endX,endY);

var objId= document.getElementById(divId);

if(objId== null)return false;

var objCanvas= objId.getContext(‘2d’);

//画线

objCanvas.beginPath();

objCanvas.translate(ox,oy,0); //坐标源点

objCanvas.moveTo(start[0],start[1]);

objCanvas.lineTo(end[0],end[1]);

objCanvas.fill();

objCanvas.stroke();

//画箭头

objCanvas.translate(end[0],end[1]);

//我的箭头本垂直向下,算出直线偏离Y的角,然后旋转 ,rotate是顺时针旋转的,所以加个负号

var t=(end[0]-start[0])/(end[1]-start[1]);

t=Math.atan(atg);

if(end[1]-start[1] >= 0){

objCanvas.rotate(-t);

}else{

objCanvas.rotate(Math.PI-t);

}

objCanvas.lineTo(-5,-10);

objCanvas.lineTo(0,-5);

objCanvas.lineTo(5,-10);

objCanvas.lineTo(0,0);

objCanvas.fill(); //箭头是个封闭图形

objCanvas.closePath();

}

drawLineAndArrow(“showDrawPic”,0,0,0,0,300,100);

< /script>

< /head>

< body>

< canvas id="showDrawPic" width="900" height="800">

< /body>

< /html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值