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读取Android permission文件
Nov 01 Python
asyncio 的 coroutine对象 与 Future对象使用指南
Sep 11 Python
Python Sqlite3以字典形式返回查询结果的实现方法
Oct 03 Python
Python中二维列表如何获取子区域元素的组成
Jan 19 Python
Python中常用信号signal类型实例
Jan 25 Python
解决python删除文件的权限错误问题
Apr 24 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
Nov 15 Python
wxPython窗体拆分布局基础组件
Nov 19 Python
在django admin详情表单显示中添加自定义控件的实现
Mar 11 Python
spyder 在控制台(console)执行python文件,debug python程序方式
Apr 20 Python
Python pygame实现中国象棋单机版源码
Jun 20 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学习笔记(三)操作符与控制结构
2011/08/06 PHP
php session劫持和防范的方法
2013/11/12 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
php实现邮件发送并带有附件
2014/01/24 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
Js的MessageBox
2006/12/03 Javascript
JavaScript类库D
2010/10/24 Javascript
两个Javascript小tip资料
2010/11/23 Javascript
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/25 Javascript
jquery form表单序列化为对象的示例代码
2014/03/05 Javascript
javascript匿名函数应用示例介绍
2014/03/07 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
2014/04/10 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
使用JavaScript实现旋转的彩圈特效
2015/06/23 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
jQuery源码分析之sizzle选择器详解
2017/02/13 Javascript
ajax接收后台数据在html页面显示
2017/02/19 Javascript
解决浏览器会自动填充密码的问题
2017/04/28 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
angular2模块和共享模块详解
2018/04/08 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
Python中Django 后台自定义表单控件
2017/03/28 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
Python实现的网页截图功能【PyQt4与selenium组件】
2018/07/12 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
Python基于traceback模块获取异常信息
2020/07/23 Python
中学生纪念九一八事变演讲稿
2014/09/14 职场文书
2015年高三班主任工作总结
2015/05/21 职场文书
离婚被告答辩状
2015/05/22 职场文书
聊聊Python String型列表求最值的问题
2022/01/18 Python
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js