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实现感知器模型、两层神经网络
Dec 19 Python
python复制列表时[:]和[::]之间有什么区别
Oct 16 Python
python 读取竖线分隔符的文本方法
Dec 20 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
Python中的random.uniform()函数教程与实例解析
Mar 02 Python
python关于矩阵重复赋值覆盖问题的解决方法
Jul 19 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
Python中的上下文管理器相关知识详解
Sep 19 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
DataFrame 数据合并实现(merge,join,concat)
Jun 14 Python
Anaconda详细安装步骤图文教程
Nov 12 Python
解决TensorFlow训练模型及保存数量限制的问题
Mar 03 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中sprintf与printf函数用法区别解析
2014/02/17 PHP
比较完整的微信开发php代码
2016/08/02 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
脚本收藏iframe
2006/07/21 Javascript
基于jQuery的树控件实现代码(asp.net+json)
2010/07/11 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
jQuery DOM插入节点操作指南
2015/03/03 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
js读取json文件片段中的数据实例
2017/03/09 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
Python中针对函数处理的特殊方法
2014/03/06 Python
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
python程序封装为win32服务的方法
2021/03/07 Python
PyQt5 在label显示的图片中绘制矩形的方法
2019/06/17 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
使用layui实现左侧菜单栏及动态操作tab项的方法
2020/11/10 HTML / CSS
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
应届毕业生的个人自我鉴定
2013/10/24 职场文书
2014新年寄语
2014/01/20 职场文书
银行优秀员工事迹
2014/02/06 职场文书
单位婚育证明范本
2014/11/21 职场文书
贷款工资证明范本
2015/06/12 职场文书
班委竞选稿范文
2015/11/21 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL