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单例模式与metaclass
Jan 15 Python
批处理与python代码混合编程的方法
May 19 Python
python下读取公私钥做加解密实例详解
Mar 29 Python
Python基于最小二乘法实现曲线拟合示例
Jun 14 Python
利用python循环创建多个文件的方法
Oct 25 Python
详解Python使用Plotly绘图工具,绘制甘特图
Apr 02 Python
python实现自动化上线脚本的示例
Jul 01 Python
Python+OpenCv制作证件图片生成器的操作方法
Aug 21 Python
Python迭代器模块itertools使用原理解析
Dec 11 Python
Python迷宫生成和迷宫破解算法实例
Dec 24 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
Apr 10 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
Jul 02 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函数utf8转gb2312编码
2006/12/21 PHP
PHP基础知识回顾
2012/08/16 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
PHP实现的大文件切割与合并功能示例
2018/04/10 PHP
点击进行复制的JS代码实例
2013/08/23 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
js实现文字滚动效果
2016/03/03 Javascript
深入浅出ES6之let和const命令
2016/08/25 Javascript
详解XMLHttpRequest(一)同步请求和异步请求
2016/09/14 Javascript
JavaScript中的子窗口与父窗口的互相调用问题
2017/02/08 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
JS中的继承操作实例总结
2020/06/06 Javascript
JavaScript动画实例之粒子文本的实现方法详解
2020/07/28 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
Python中的jquery PyQuery库使用小结
2014/05/13 Python
详解用python生成随机数的几种方法
2019/08/04 Python
解决Mac下使用python的坑
2019/08/13 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
python游戏开发的五个案例分享
2020/03/09 Python
Python中SQLite如何使用
2020/05/27 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
什么是Linux虚拟文件系统VFS
2015/08/25 面试题
幼师专业求职推荐信
2013/11/08 职场文书
聘用意向书
2014/07/29 职场文书
庆国庆活动总结
2014/08/28 职场文书
情侣之间的道歉短信
2015/05/12 职场文书