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 相关文章推荐
linux 下实现python多版本安装实践
Nov 18 Python
Python列表和元组的定义与使用操作示例
Jul 26 Python
Python使用combinations实现排列组合的方法
Nov 13 Python
Python调用服务接口的实例
Jan 03 Python
python 中pyqt5 树节点点击实现多窗口切换问题
Jul 04 Python
python画图——实现在图上标注上具体数值的方法
Jul 08 Python
python基于paramiko将文件上传到服务器代码实现
Jul 08 Python
基于python全局设置id 自动化测试元素定位过程解析
Sep 04 Python
python飞机大战pygame游戏之敌机出场实现方法详解
Dec 17 Python
tensorflow实现二维平面模拟三维数据教程
Feb 11 Python
Python气泡提示与标签的实现
Apr 01 Python
python基础学习之生成器与文件系统知识总结
May 25 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目录管理函数小结
2008/09/10 PHP
php截取字符串函数分享
2015/02/02 PHP
PHP获取文件相对路径的方法
2015/02/26 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
js跟随滚动条滚动浮动代码
2009/12/31 Javascript
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
2018/07/05 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
python结合opencv实现人脸检测与跟踪
2015/06/08 Python
Python AES加密模块用法分析
2017/05/22 Python
python3.6的venv模块使用详解
2018/08/01 Python
Python搭建代理IP池实现获取IP的方法
2019/10/27 Python
HTML5之SVG 2D入门12—SVG DOM及DOM操作介绍
2013/01/30 HTML / CSS
Html5自定义字体解决方法
2019/10/09 HTML / CSS
HTML中meta标签及Keywords
2020/04/15 HTML / CSS
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
党委干部批评与自我批评发言稿
2014/09/28 职场文书
幼儿园园长新年寄语2015
2014/12/08 职场文书
小学工作总结2015
2015/05/04 职场文书
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis
详解Python中*args和**kwargs的使用
2022/04/07 Python