JavaScript: 使用 atan2 bwin亚洲必赢5566手机版来绘制 箭头 和 曲线

方今搞Canvas绘图,知道了JavaScript中提供了atan2(y,x)那样3个三角形函数。乍眼一看,不认得,毕竟在高级中学时,学过的三角形函数有:sin,cos,arcsin,arccos,tan,arctan等,并没有那么些。而工作中又必要选择它,所以那边就做了个简单的领会。

 

  1. 在坐标系中级知识分子道tan
    和atan
  2. 为何存在atan2
    ?
  3. atan2
    应用

 

 

 

在坐标系中精晓tan 和 atan

纪念一下三角函数tan:

tanθ,用三角函数来表示时,它的值等于sinθ/cosθ,假使将其置于坐标系中,它的的值等价于:dy/dx。在坐标系中,任意八个点所结合的直线,相对于x轴的斜率就是tanθ = dy /dx,相对于y轴的斜率正是dx/dy ,此时大家用cot来表示;在那之中,dy 是多少个点的y坐标的差值,dx是四个点的x坐标的差值。

那么坐标系内而外y轴,任何一个点(x,y),相对于x轴的斜率便是y-0/x-0,约等于y/x。

 bwin亚洲必赢5566手机版 1

大家将tanθ称为一条直线相对于x轴的斜率,那么θ正是相对于x轴的夹角(旋转角度)了。

tan,是根据角度总计斜率的。那么反过来
arctan(反正切)自然就认为是遵照斜率来总结角度的。

 

为啥存在atan2 ?

在JavaScript中,提供了两个arctan函数,1个是atan, 一个是atan2。 atan正是大家所熟习arctan。其实在无数编制程序语言中都提供了atan2。

那么atan2又是怎么回事呢?

 

要通晓那些,要求精晓arctan的不足之处:

arctan的重临值范围是(-π/2,  π/2) 不包蕴, ±π/2,也正是(多少个点组成的直线与x轴夹角是90°)90°是计算不出来的。为何呢?在总结arctan ( dy/dx)时,要是七个点(x1,y1),(x2,y2)组成的直线与x轴的夹角呈90°时,dx= x2-x1 = 0 ,0 是不可能作为除数的,所以就不可能测算这种境况。

值的限定也正是总结的角度的范围在(-π/2,  π/2),从坐标系来看,那一个角度的限制只可以是在第三 、4象限,并不能够代表出第壹 、3象限的角。

 

为了弥补atan的不足,在计算机编制程序领域,引入了atan2函数,它的猜测结果是在(-π,π]。它正好可以覆盖全部坐标系,包含90°的图景。

 

它的估量进程是怎样的吗?

关于那一个,作者从wikipedia上选取了它的测算进程:

 bwin亚洲必赢5566手机版 2

 

 

 

atan2的应用

在率先小节中的那张图中的坐标系,是我们熟谙的。在HTML、Canvas中,坐标系并不像大家熟识的坐标系那样。它是那般的:

 

从x轴正向沿顺时针方向,所经过的角度分别是0,π/2, π,3π/2,2π。

从x轴正向沿逆时针方向,所经过的角度分别是0,-π/2, -π,-3π/2,-2π。

 

 bwin亚洲必赢5566手机版 3

 

atan2的结果在(-π,π]以内,恰好一周,八个象限全覆盖。从坐标系来看,顺时针方向的值是正值,逆时针方向的值是负的。 

从坐标系上来看,atan2结果是(0,-π)时就象征,从x轴正向逆时针方向转最大 π弧度(180角度)。同理,(0,π)表示从x轴正向顺时针转最大π弧度(180角度)。

 

在第①)小节中说了atan能够用来测算平面坐标系内任意两点的连线与x轴正向之间的夹角。而atan2是atan的填补,那么使用atan2自然就可以来测算平面坐标系内私行两点的连线与x轴正向之间的夹角了。

 要是八个点在首先象限内:

 bwin亚洲必赢5566手机版 4

 

即便多个点在第④象限内:

bwin亚洲必赢5566手机版 5

倘若四个点在分歧的象限内,我们也可以移动来看。

 

 

曾几何时要求运用atan2 ?

 

脚下我遇上了两种情景,是通过atan2来消除的:

1) 在平面坐标系内任意八个点间画一条带有箭头的直线(能够是单向箭头,能够是双向箭头)。在那几个供给中,此外也知晓了箭头的一条边与直线的夹角和箭头的长短。

以此供给的难关正是要总结出箭头的另外三个点坐标。

2) 在平面坐标系内随机五个点之间画一条钦赐曲率的曲线(arc)。在那几个须要中,要总括arc,自然要知道radius, startAngle, endAngle,圆心坐标。能够遵照曲率来计算出半径等,但是困难在盘算圆心坐标。

 

那五个须要的协同天性是:

1)四个已知的点

2)依据那八个点和其它的口径去总括一些亟须的(画line,arc等必须的)点坐标。

 

时下自作者赶上了那二种必要,都经过atan2来消除的。别的的气象,如今尚且一无所知,待后续发现时,补充上。