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实现定制交互式命令行的方法
Jul 03 Python
python计算书页码的统计数字问题实例
Sep 26 Python
用Python制作检测Linux运行信息的工具的教程
Apr 01 Python
Python新手在作用域方面经常容易碰到的问题
Apr 03 Python
Python调用系统底层API播放wav文件的方法
Aug 11 Python
python使用xslt提取网页数据的方法
Feb 23 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
May 16 Python
分享8个非常流行的 Python 可视化工具包
Jun 05 Python
python开启debug模式的方法
Jun 27 Python
python 图片去噪的方法示例
Jul 09 Python
Cpython解释器中的GIL全局解释器锁
Nov 09 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
Feb 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
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
2014/11/05 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
一步一步制作jquery插件Tabs实现过程
2010/07/06 Javascript
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
JS检测页面中哪个HTML标签触发点击事件的方法
2016/06/17 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
2016/12/19 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
2018/02/24 Javascript
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
vue生命周期的探索
2019/04/03 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
Python 读取位于包中的数据文件
2020/08/07 Python
css3实现椭圆轨迹旋转的示例代码
2018/10/29 HTML / CSS
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
车队安全员岗位职责
2015/02/15 职场文书
如何写新闻稿
2015/07/18 职场文书
学校教代会开幕词
2016/03/04 职场文书
python如何读取.mtx文件
2021/04/22 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python