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

 //atan2.c
#include <syslib.h>
#include <math.h> main()
{
float x,y;
clrscr(); // clear screen
textmode(0x00); // 6 lines per LCD screen
x=0.064;
y=0.2;
printf("atan2(%.3f,%.2f)=%.4f",y,x,atan2(y,x));
getchar();
return ;
}

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

 // atan.c
#include <syslib.h>
#include <math.h> main()
{
float x;
clrscr(); // clear screen
textmode(0x00); // 6 lines per LCD screen
x=0.32;
printf("atan(%.2f)=%.4f",x,atan(x));
getchar();
return ;
}

本例使用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

atan()与atan2()的更多相关文章

  1. 反正切函数atan与atan2的区别

    atan 和 atan2 都是求反正切函数,如:有两个点 point(x1,y1), 和 point(x2,y2); 那么这两个点形成的斜率的角度计算方法分别是: float angle = atan ...

  2. C语言math.h库函数中atan与atan2的区别

    源: C语言math.h库函数中atan与atan2的区别 C语言中的atan和atan2

  3. atan与atan2的区别

    相比较ATan,ATan2究竟有什么不同?本篇介绍一下ATan2的用法及使用条件. 对于tan(θ) = y / x: θ = ATan(y / x)求出的θ取值范围是[-PI/2, PI/2]. θ ...

  4. atan 和 atan2

     转自http://blog.csdn.net/chinabinlang/article/details/6802686 atan函数与atan2函数的一点区别 . atan 和 atan2 都是求反 ...

  5. C语言中的atan和atan2(转)

    在C语言的math.h或C++中的cmath中有两个求反正切的函数atan(double x)与atan2(double y,double x)  他们返回的值是弧度 要转化为角度再自己处理下. 前者 ...

  6. C语言中的atan和atan2

    本文内容为转载,是在阅读 RTKLIB源码时意识到的这个问题,原文地址为:https://www.cnblogs.com/dutlei/archive/2013/01/14/2860332.html ...

  7. atan和atan2反正切计算

    typedef struct point { double x, y; }point; //给定两个点 point a(x1,y1),b(x2,y2); 使用反三角函数atan求斜率,原型如下 flo ...

  8. atan函数与atan2函数

    atan函数:传送门. atan2函数:传送门. atan 和 atan2 都是求反正切函数,如:有两个点 point(x1,y1), 和 point(x2,y2); 那么这两个点形成的斜率的角度计算 ...

  9. atan atan2的区别!

    atan与atan2的使用=范围不一样! 今天调一一下午的BUG!终于发现了是ATAN的错! atan()函数: atan(y/x); 带一个参数!注意X不能为0,否则…………, 还有求出的角度为-p ...

随机推荐

  1. MYsql数据库ERROR总结

    描述:#Warning: Using a password on the command line interface can be insecure.#ERROR 1045 (28000): Acc ...

  2. java 位操作的总结

    2014-05-07 17:14 今天工作上需要一个Byte的低5位,高3位.所以查询了资料.总结下如何实现 百度到一个资料: 介绍的很详细 基础知识: http://www.blogjava.net ...

  3. limesurvey设置短调查问卷url

    If you want to use fancy URLs and so not have /index.php in every URL please edit /application/confi ...

  4. Nodejs之发送邮件nodemailer

    nodejs邮件模块nodemailer的使用说明 1.介绍 nodemailer是node的一个发送邮件的组件,其功能相当强大,普通邮件,传送附件,邮件加密等等都能实现,而且操作也十分方便. nod ...

  5. OpenSceneGraph几个重要功能节点练习

    OpenSceneGraph几个重要功能节点练习 一. 空间变换节点 空间变换中最重要的是坐标系和矩阵运算了.OSG坐标系中使用右手系,Z轴垂直向上,X轴水平向右,Y轴垂直屏幕向里,与OpenGL和D ...

  6. ubuntu系统中crontab的使用介绍

    1.创建crontab任务 用户hancool

  7. php防止重复提交表单

    解决方案一:引入cookie机制来解决 提交页面代码如下a.php代码如下: <form id="form1" name="form1" method=& ...

  8. JavaScript 开发工具webstrom使用指南

    本文给大家推荐了一款非常热门的javascript开发工具webstrom,着重介绍了webstrom的特色功能.设置技巧.使用心得以及快捷键汇总,非常的全面. 看到网上一篇介绍webstrom的文章 ...

  9. Quartz2D 之 简单使用

    1. 获取Graphics Context CGContextRef ctx = UIGraphicsGetCurrentContext(); 2. 最后的渲染接口 CGContextStrokePa ...

  10. 【angularjs】【学习心得】路由继续研究篇

    原文:http://www.imooc.com/wenda/detail/236998 其实路由的功能是比较复杂的,我们实际应用中页面的状态也是非常多的,上面简单的路由是肯定不能满足我们的需求的,所以 ...