• atan()与atan2()


    Atan2 函数介绍 atan2
    原型:extern float atan2(float y, float x);
    用法:#include <math.h>
    功能:求y/x(弧度表示)的反正切值
    说明:值域为(-π/2,+π/2)
    举例:atan

     1 //atan2.c
     2 #include <syslib.h>
     3 #include <math.h>
     4 
     5 main()
     6 {
     7 float x,y;
     8 clrscr(); // clear screen
     9 textmode(0x00); // 6 lines per LCD screen
    10 x=0.064;
    11 y=0.2;
    12 printf("atan2(%.3f,%.2f)=%.4f",y,x,atan2(y,x));
    13 getchar();
    14 return 0;
    15 }

    原型:extern float atan(float x);
    用法:#include <math.h>
    功能:求x(弧度表示)的反正切值
    说明:值域为(-π/2,+π/2)。
    举例:范例

     1 // atan.c
     2 #include <syslib.h>
     3 #include <math.h>
     4 
     5 main()
     6 {
     7 float x;
     8 clrscr(); // clear screen
     9 textmode(0x00); // 6 lines per LCD screen
    10 x=0.32;
    11 printf("atan(%.2f)=%.4f",x,atan(x));
    12 getchar();
    13 return 0;
    14 }

    本例使用Ata2 函数来返回原点正上方的点的反正切值。
    Dim d as Double
    Const PI=3.14159265358979323846264338327950

    d=Atan2(1,0) //返回 1.57

    d=Atan2(1,0)*180/PI //返回 90

    我们可以使用正切操作将角度转变为斜率,那么怎样利用斜率来转换为角度呢?可以利用斜率的反正切函数将他转换为相应的角度.as中有两个函数可以计算反正切,我们来看一下.

    1、as中Math.atan()

    Math.atan()接受一个参数:用法如下:

    angel=Math.atan(slope)

    angel为一个角度的弧度值,slope为直线的斜率,是一个数字,这个数字可以是负的无穷大到正无穷大之间的任何一个值.

    不过,利用他进行计算比较复杂.因为他的周期性,一个数字的反正切值不止一个.例如atan(-1)的值可能是45度,也可能是225度.这样就是他的周期性,对于正切函数来说,他的周期是180度,所以两个相差180度的角具有相同的正切和斜率:

    tanθ=tan(θ+180)

    然而,Math.atan()只能返回一个角度值,因此确定他的角度非常的复杂,而且,90度和270度的正切是无穷大,因为除数为零,我们也是比较难以处理的~!因此我们更多的会采用第二个函数.

    2、Math.atan2()

    Math.atan2()接受两个参数x和y,方法如下:

    angel=Math.atan2(y,x)

    x 指定点的 x 坐标的数字。

    y 指定点的 y 坐标的数字。

    计算出来的结果angel是一个弧度值,也可以表示相对直角三角形对角的角,其中 x 是临边边长,而 y 是对边边长。

    下面我们来测试一下这两个函数:

    x=Math.atan(1)  //计算正切值为1的数字对应的弧度值

    trace(x)  //输出一个弧度值0.785398163397448

    x=180*x/Math.PI   //转换为角度值

    trace(x)  //输出45

    x=Math.atan2(7,7)

    trace(x)   //输出0.785398163397448

    x=180*x/Math.PI   //转换为角度值

    trace(x)    //输出45

    x=Math.atan2(7,-7)

    trace(x)//2.35619449019234

    x=180*x/Math.PI    //转换为角度值

    trace(x)135

    x=Math.atan2(-7,7)

    trace(x)   //输出-0.785398163397448

    x=180*x/Math.PI   //转换为角度值

    trace(x)  //输出-45

    x=Math.atan2(-7,-7)

    trace(x)   //输出-2.35619449019234

    x=180*x/Math.PI   //转换为角度值

    trace(x)   //输出-135

    //从这些测试可以看出,通过坐标系的自动调整,我们可以很自由的计算出处于不同象限的位置相对应的角度.

    3、计算两点间连线的倾斜角.

    这种方法非常的有用.

    Math.atan2()函数返回点(x,y)和原点(0,0)之间直线的倾斜角.那么如何计算任意两点间直线的倾斜角呢?只需要将两点x,y坐标分别相减得到一个新的点(x2-x1,y2-y1).然后利用他求出角度就可以了.使用下面的一个转换可以实现计算出两点间连线的夹角.Math.atan2(y2-y1,x2-x1)

    不过这样我们得到的是一个弧度值,在一般情况下我们需要把它转换为一个角度.

    下面我们用一段代码来测试一下这样的转换.

    //测试,计算点(3,3)和(5,5)构成的连线的夹角

    x=Math.atan2(5-3,5-3)

    trace(x)//输出0.785398163397448

    x=x*180/Math.PI//转换为角度

    trace(x)//输出45

  • 相关阅读:
    《JavaScript面向对象的编程指南》--读书笔记
    《高性能JavaScript》--读书笔记
    《高性能网站建设指南》--读书笔记
    vertical-align属性探究
    IP地址.md
    Visual Studio Code.md
    ComboBox
    2017 续办上海居住证和积分办理流程
    希腊字母、拉丁字母、Markdown、拼写与读音中英对照表
    Windows Server 2008 添加 IIS 服务
  • 原文地址:https://www.cnblogs.com/Zblogs/p/3287778.html
Copyright © 2020-2023  润新知