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 matplotlib画图实例代码分享
Dec 27 Python
启动Atom并运行python文件的步骤
Nov 09 Python
浅谈python中真正关闭socket的方法
Dec 18 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
Mar 18 Python
python多进程并行代码实例
Sep 30 Python
基于Python解密仿射密码
Oct 21 Python
python实现多进程按序号批量修改文件名的方法示例
Dec 30 Python
python实现输入三角形边长自动作图求面积案例
Apr 12 Python
Python开发入门——迭代的基本使用
Sep 03 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
Feb 01 Python
Python实现Hash算法
Mar 18 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
2006/10/09 PHP
substr()函数中文版
2006/10/09 PHP
PHP的类 功能齐全的发送邮件类
2006/10/09 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
Linux下php5.4启动脚本
2014/08/03 PHP
PHP中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
2016/02/16 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
Mongoose中document与object的区别示例详解
2017/09/18 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
利用Python的Django框架中的ORM建立查询API
2015/04/20 Python
Python探索之修改Python搜索路径
2017/10/25 Python
对Python发送带header的http请求方法详解
2019/01/02 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
Linux如何修改文件和文件夹的权限
2012/06/27 面试题
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
2016/03/23 面试题
仓管员岗位职责范文
2013/11/08 职场文书
十岁生日家长答谢词
2014/01/17 职场文书
微笑服务标语
2014/06/24 职场文书
2014年党员自我评议总结
2014/09/23 职场文书
仓管员岗位职责范本
2015/04/01 职场文书
法制教育主题班会
2015/08/13 职场文书
React中的Context应用场景分析
2021/06/11 Javascript
小程序实现侧滑删除功能
2022/06/25 Javascript
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL