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数据库操作常用功能使用详解(创建表/插入数据/获取数据)
Dec 06 Python
Python基类函数的重载与调用实例分析
Jan 12 Python
使用Python标准库中的wave模块绘制乐谱的简单教程
Mar 30 Python
编写简单的Python程序来判断文本的语种
Apr 07 Python
使用Python的Tornado框架实现一个一对一聊天的程序
Apr 25 Python
Python django使用多进程连接mysql错误的解决方法
Oct 08 Python
pycharm 解除默认unittest模式的方法
Nov 30 Python
python 随机打乱 图片和对应的标签方法
Dec 14 Python
python 自动批量打开网页的示例
Feb 21 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
pytorch 实现cross entropy损失函数计算方式
Jan 02 Python
Django如何实现密码错误报错提醒
Sep 04 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
Symfony页面的基本创建实例详解
2015/01/26 PHP
php mysql获取表字段名称和字段信息的三种方法
2016/11/13 PHP
jquery蒙版控件实现代码
2010/12/08 Javascript
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
NodeJS整合银联网关支付(DEMO)
2016/11/09 NodeJs
Vue如何从1.0迁移到2.0
2017/10/19 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
jQuery动态移除与增加onclick属性的方法详解
2018/06/07 jQuery
微信小程序时间轴实现方法示例
2019/01/14 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
2019/06/18 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
使用Python的Flask框架构建大型Web应用程序的结构示例
2016/06/04 Python
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
Python中的self用法详解
2019/08/06 Python
python读取ini配置文件过程示范
2019/12/23 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
Python3 shelve对象持久存储原理详解
2020/03/23 Python
如何在sublime编辑器中安装python
2020/05/20 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
全球度假村:Club Med
2017/11/27 全球购物
工商管理专业实习生自我鉴定
2013/09/29 职场文书
国贸专业的职业规划范文
2014/01/23 职场文书
小学班主任个人总结
2015/03/03 职场文书
求职自荐信怎么写
2015/03/04 职场文书
学习党史心得体会2016
2016/01/23 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python