python 计算方位角实例(根据两点的坐标计算)


Posted in Python onJanuary 17, 2020

知道两点坐标,怎么计算两点方向的方位角?

答:首先计算坐标增量dx,dy(两个对应坐标分量相减,终点的减始点的)。

若dx,dy中有一个为零时,根据另一个的正负决定方位角(0,90,180,270这四个中的一个,可画坐标轴图分析,但不要画为数学坐标哦)。

基本思路:

若dx,dy都不为零;则

计算a=arcatn(|dy/dx|)(这好像叫象限角)

当dx>0dy>0时方位角=a;

当dx<0dy>0时方位角=180-a;

当dx<0dy<0时方位角=180+a; 负范围为a-pi

当dx>0dy<0时方位角=360-a; 负范围为-a

还有一种方法,使用 atan2来计算方位角,范围为-pi,pi

atan2(y,x)所表达的意思是坐标原点为起点,指向(x,y)的射线在坐标平面上与x轴正方向之间的角的角度。

结果为正表示从 X 轴逆时针旋转的角度,结果为负表示从 X 轴顺时针旋转的角度。

atan 和 atan2 都是求反正切函数,如:有两个点 point(x1,y1), 和 point(x2,y2);

那么这两个点形成的斜率的角度计算方法分别是:

float angle = atan( (y2-y1)/(x2-x1) );
float angle = atan2( y2-y1, x2-x1 );

atan 和 atan2 区别:

1:参数的填写方式不同;

2:atan2 的优点在于 如果 x2-x1等于0 依然可以计算,但是atan函数就会导致程序出错;

3:atan2(a,b)的取值范围介于 -pi 到 pi 之间(不包括 -pi),而atan(a/b)的取值范围介于-pi/2到pi/2之间(不包括±pi/2)。

另外要注意的是,函数atan2(y,x)中参数的顺序是倒置的,atan2(y,x)计算的值相当于点(x,y)的角度值。

atan2(y, x)是4象限反正切,它的取值不仅取决于正切值y/x,还取决于点 (x, y) 落入哪个象限:

当点(x, y) 落入第一象限时,atan2(y, x)的范围是 0 ~ pi/2;
当点(x, y) 落入第二象限时,atan2(y, x)的范围是 pi/2 ~ pi;
当点(x, y) 落入第三象限时,atan2(y, x)的范围是 -pi~-pi/2;
当点(x, y) 落入第四象限时,atan2(y, x)的范围是 -pi/2~0.


而 atan(y/x) 仅仅根据正切值为y/x求出对应的角度 (可以看作仅仅是2象限反正切):

当 y/x > 0 时,atan(y/x)取值范围是 0 ~ pi/2;
当 y/x < 0 时,atan(y/x)取值范围是 -pi/2~0.

如果要实现方位角的计算,代码如下:

# 计算方位角函数
def azimuthAngle( x1, y1, x2, y2):
  angle = 0.0;
  dx = x2 - x1
  dy = y2 - y1
  if x2 == x1:
    angle = math.pi / 2.0
    if y2 == y1 :
      angle = 0.0
    elif y2 < y1 :
      angle = 3.0 * math.pi / 2.0
  elif x2 > x1 and y2 > y1:
    angle = math.atan(dx / dy)
  elif x2 > x1 and y2 < y1 :
    angle = math.pi / 2 + math.atan(-dy / dx)
  elif x2 < x1 and y2 < y1 :
    angle = math.pi + math.atan(dx / dy)
  elif x2 < x1 and y2 > y1 :
    angle = 3.0 * math.pi / 2.0 + math.atan(dy / -dx)
  return (angle * 180 / math.pi)

math中关于三角函数常用的操作:

import math
math.acos(x)  # 返回 x 的反余弦 弧度值。  
math.asin(x)  # 返回 x 的反正弦 弧度值。  
math.degrees(x)  # 将 弧度 转换为 角度, 如 degrees(math.pi/2) , 返回90.0  
math.radians(x)  # 将 角度 转换为 弧度
注意负数角度的转换。

以上这篇python 计算方位角实例(根据两点的坐标计算)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中使用sort()方法进行排序的简单教程
May 21 Python
python实现给微信公众号发送消息的方法
Jun 30 Python
python利用urllib和urllib2访问http的GET/POST详解
Sep 27 Python
Python判断两个对象相等的原理
Dec 12 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
Nov 29 Python
pytorch使用Variable实现线性回归
May 21 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
Aug 13 Python
python线程信号量semaphore使用解析
Nov 30 Python
python线程池如何使用
May 28 Python
tensorflow图像裁剪进行数据增强操作
Jun 30 Python
Django-imagekit的使用详解
Jul 06 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
Apr 28 Python
Python autoescape标签用法解析
Jan 17 #Python
flask利用flask-wtf验证上传的文件的方法
Jan 17 #Python
Python with标签使用方法解析
Jan 17 #Python
Python运行DLL文件的方法
Jan 17 #Python
Python3实现mysql连接和数据框的形成(实例代码)
Jan 17 #Python
python如何基于redis实现ip代理池
Jan 17 #Python
解决python gdal投影坐标系转换的问题
Jan 17 #Python
You might like
删除数组元素实用的PHP数组函数
2008/08/18 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
2014/04/24 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
详解PHP文件的自动加载(autoloading)
2018/02/04 PHP
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
JS定义类的六种方式详解
2016/05/12 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
详解Angular6.0使用路由步骤(共7步)
2018/06/29 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
2018/10/20 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
python中学习K-Means和图片压缩
2017/11/20 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
2018/07/12 Python
python批量修改图片尺寸,并保存指定路径的实现方法
2019/07/04 Python
python 并发下载器实现方法示例
2019/11/22 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
2020/02/25 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
关于python中remove的一些坑小结
2021/01/04 Python
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
.NET现在共支持多少种语言
2014/02/26 面试题
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
劳动模范事迹材料
2014/01/19 职场文书
土建专业大学生自荐信范文
2014/04/09 职场文书
学校消防安全责任书
2014/07/23 职场文书
师德师风自查材料
2014/10/14 职场文书
2014年学校工作总结
2014/11/20 职场文书
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL