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中unittest实现简单的单元测试实例详解
Jan 09 Python
Python自动发邮件脚本
Mar 31 Python
简单谈谈python中的lambda表达式
Jan 19 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
python 获取字符串MD5值方法
May 29 Python
python计算两个地址之间的距离方法
Jun 09 Python
Python socket套接字实现C/S模式远程命令执行功能案例
Jul 06 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
Aug 06 Python
python 并发编程 阻塞IO模型原理解析
Aug 20 Python
python为QT程序添加图标的方法详解
Mar 09 Python
Python Selenium 设置元素等待的三种方式
Mar 18 Python
JupyterNotebook 输出窗口的显示效果调整实现
Sep 22 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
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
php数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
2013/12/28 Javascript
微信小程序 火车票查询实例讲解
2016/10/17 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
浅谈Angular路由守卫
2017/08/26 Javascript
JavaScript原型链与继承操作实例总结
2018/08/24 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
python防止随意修改类属性的实现方法
2019/08/21 Python
python3正则模块re的使用方法详解
2020/02/11 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
2016/12/14 HTML / CSS
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
行政经理的岗位职责
2013/11/23 职场文书
大学生优秀团员事迹材料
2014/01/30 职场文书
mysql sock文件存储了什么信息
2022/07/15 MySQL