最近做了Canvas绘图,知道JavaScript中提供了一个atan2(y,x)之类的三角函数。乍一看,我不知道。毕竟高中的时候学过sin、cos、arcsin、arccos、tan、arctan等三角函数。但我没有这个。而且需要在工作中使用,所以这里简单了解一下。
理解坐标系中的tan和atan
复习三角函数tan:
当tan用三角函数表示时,它的值等于sin/cos,如果放入坐标系,它的值相当于dy/dx。在坐标系中,任意两点组成的直线相对于X轴的斜率为tan=dy /dx,相对于Y轴的斜率为dx/dy。这时,我们用cot来表示。其中dy是两点y坐标之差,dx是两点x坐标之差。
那么坐标系中任意点(x,y)相对于x轴的斜率为y-0/x-0,即y/x。
我们称tan为直线相对于X轴的斜率,所以为相对于X轴的夹角(转角)。
谭,坡度是按角度计算的。那么arctan (arctan)自然被视为根据坡度计算角度。
为什么存在于2?
在JavaScript中,提供了两个arctan函数,一个是atan,另一个是atan2。Atan被称为arctan。实际上,很多编程语言都提供了atan2。
第二个呢?
要了解这一点,您需要了解arctan的缺点:
arctan的返回值范围为(-/2,/2)不含,/2,即(两点组成的直线与X轴的夹角为90)90无法计算。为什么呢?在计算arctan (dy/dx)时,如果由两点(x1,y1)和(x2,y2)组成的直线与x轴的夹角为90,则dx=x2-x1=0,不能作为除数,因此这种情况无法计算。
值的范围,即计算角度的范围是(-/2,/2)。从坐标系来看,这个角度的范围只能在第一、四象限,第二、三象限的角度无法表达。
为了弥补atan的不足,在计算机编程领域引入了atan2函数,其计算结果为(-,】。它可以覆盖整个坐标系,包括90。
它的计算过程是怎样的?
关于这一点,我从维基百科上摘录了它的计算过程:
atan2的应用
第一节图片中的坐标系是我们熟知的。在HTML和Canvas中,坐标系没有坐标系那么广为人知。事情是这样的:
从X轴正方向到顺时针方向,通过角分别为0、/2、、3/2和2。
从X轴的正方向到逆时针方向,通过角度分别为0、-/2、-、-3/2和-2。
atan2的结果在(-,)之间,就一周,四个象限都覆盖了。从坐标系来看,顺时针值为正,逆时针值为负。
从坐标系看,当atan2的结果为(0,-)时,表示最大弧度(180角)从x轴正方向逆时针转动。同理,(0,)表示从X轴正方向顺时针方向的最大弧度(180度)。
在第1)小节中,可以用atan计算平面坐标系中任意两点的连线与X轴正方向的夹角。而atan2是对atan的补充,用atan2计算平面坐标系中任意两点连线与x轴正方向的夹角是很自然的。
如果两点在第一象限:
如果两点在第四象限:
如果两点在不同的象限,我们也可以在翻译的时候看。
我什么时候需要使用atan2?
目前我遇到了两种情况,由atan2解决:
1)在平面坐标系的任意两点之间画一条带箭头的直线(可以是单向箭头,也可以是双向箭头)。在这个要求中,我们还知道箭头一侧与直线的夹角以及箭头的长度。
这个要求的难点是计算箭头其他两点的坐标。
2)在平面坐标系的任意两点之间画出具有指定曲率的圆弧。在这个要求中,要计算圆弧,自然要知道半径、起始角、结束角和中心坐标。半径可以根据曲率计算,但难点在于计算中心坐标。
这两个要求的共同特征是:
1)两个已知点
2)根据这两点和其他条件,计算一些必要的点坐标(绘制直线、圆弧等所必需的。).
目前我遇到了这两个需求,都是用atan2解决的。其他情况目前还不得而知,待以后发现再补充。
上面这个用JavaScript中的atan2绘制箭头和曲线的例子,就是边肖分享的全部内容。希望能给大家一个参考,支持我们。