python中实现根据坐标点位置求方位角

 更新时间:2023年08月16日 09:16:04   作者:边ing  
这篇文章主要介绍了python中实现根据坐标点位置求方位角方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

python根据坐标点位置求方位角

话不多说,直接上代码:

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout
import sys
import math
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        self.resize(500, 250)
        self.setWindowTitle("坐标系")
        self.lb = QLabel("点1到原点距离:", self)
        self.lb.move(20, 40)
        self.lb2 = QLabel("点1与原点的角度:", self)
        self.lb2.move(20, 80)
        self.lb3 = QLabel("点2到原点距离:", self)
        self.lb3.move(20, 120)
        self.lb4 = QLabel("点2与原点的角度:", self)
        self.lb4.move(20, 160)
        self.bt1 = QPushButton('查询', self)
        self.bt1.move(20, 200)
        self.edit = QLineEdit('', self)
        self.edit.move(150, 40)
        self.edit2 = QLineEdit('', self)
        self.edit2.move(150, 80)
        self.edit3 = QLineEdit('', self)
        self.edit3.move(150, 120)
        self.edit4 = QLineEdit('', self)
        self.edit4.move(150, 160)
        self.bt1.clicked.connect(self.calc_angle)
        self.show()
    def calc_angle(self):
        x1 = float(self.edit.text()) * math.cos(math.radians(int(self.edit2.text())))
        y1 = float(self.edit.text()) * math.sin(math.radians(int(self.edit2.text())))
        x2 = float(self.edit3.text()) * math.cos(math.radians(int(self.edit4.text())))
        y2 = float(self.edit3.text()) * math.sin(math.radians(int(self.edit4.text())))
        angle = 0
        dy = y2 - y1
        dx = x2 - x1
        if dx == 0 and dy > 0:
            angle = 90
            print('顺时针:', angle, '°')
        if dx == 0 and dy < 0:
            angle = 270
            print('顺时针:', angle, '°')
        if dy == 0 and dx > 0:
            angle = 0
            print('顺时针:', angle, '°')
        if dy == 0 and dx < 0:
            angle = 180
            print('顺时针:', angle, '°')
        if dx > 0 and dy > 0:
            angle = math.atan(dy / dx)* 180 / math.pi
            print('东偏北:',angle,'°')
        elif dx < 0 and dy > 0:
            angle = 90 - math.atan(dy / abs(dx))* 180 / math.pi
            print('北偏西:', angle, '°')
        elif dx < 0 and dy < 0:
            angle = math.atan(dy / dx)* 180 / math.pi
            print('西偏南:', angle, '°')
        elif dx > 0 and dy < 0:
            angle = math.atan(abs(dy) / dx)* 180 / math.pi
            print('东偏南:', angle, '°')
        length = math.sqrt(dy * dy + dx * dx)
        print(length)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

> 这里是引用

这里是引用

最后的结果之所以有那么多小数点,是因为math.pi,其实就是π,3.1415926…,有很多小数位!

其实上文就是,在一个坐标系中,已知两个点到坐标原点的距离,以及它们和横轴的角度(这都是需要自己手动输入的),那么就以第一个点为此时的坐标原点,求第二个点到第一个点的距离,以及第二点在第一点的相关方位。

ps:我这里是已知两点到原点的距离和角度,就像在一个极坐标里一样,如果直接知道两点的横纵坐标,那么会更好求。

python根据坐标点计算方位角函数

# 计算方位角函数
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)
#计算角度
print(white_point)
if white_point[0][0]>white_point[1][0]:
    x1=white_point[1][0];
    y1=white_point[1][1];
    x2=white_point[0][0];
    y2=white_point[0][1];
else:
    x1=white_point[0][0];
    y1=white_point[0][1];
    x2=white_point[1][0];
    y2=white_point[1][1];
angle = 90-azimuthAngle(x1,y1,x2,y2)
print("angle:"+str(angle))

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 关于python实现常用的相似度计算方法

    关于python实现常用的相似度计算方法

    这篇文章主要介绍了关于python实现常用的相似度计算方法,最初的相似度计算是为了表征向量的重合程度的,在这里最经典的就是余弦相似度了,当然使用正弦或者是正切等等三角函数也都是可以的,需要的朋友可以参考下
    2023-07-07
  • Python如何读取txt文件,获取指定行中指定位置数据

    Python如何读取txt文件,获取指定行中指定位置数据

    这篇文章主要介绍了Python如何读取txt文件,获取指定行中指定位置数据,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Python获取指定文件夹下的文件名的方法

    Python获取指定文件夹下的文件名的方法

    本篇文章主要介绍了Python获取指定文件夹下的文件名的方法,本文采用os.walk()和os.listdir()两种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Python模块glob函数示例详解教程

    Python模块glob函数示例详解教程

    这篇文章主要介绍了Python模块glob函数的示例详解教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-10-10
  • Python实现查找字符串数组最长公共前缀示例

    Python实现查找字符串数组最长公共前缀示例

    这篇文章主要介绍了Python实现查找字符串数组最长公共前缀,涉及Python针对字符串的遍历、判断、计算等相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • Python调用C++,通过Pybind11制作Python接口

    Python调用C++,通过Pybind11制作Python接口

    今天小编就为大家分享一篇关于Python调用C++,通过Pybind11制作Python接口,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • python深度总结线性回归

    python深度总结线性回归

    这篇文章主要介绍了python的深度总结之线性回归,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Python3实现发送邮件和发送短信验证码功能

    Python3实现发送邮件和发送短信验证码功能

    这篇文章主要介绍了Python3实现发送邮件和发送短信验证码功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • Python基础学习之常见的内建函数整理

    Python基础学习之常见的内建函数整理

    所谓的内建函数,可以直接使用,而不需要import。下面这篇文章主要给大家整理介绍了关于Python基础学习之常见的一些内建函数,文中通过示例代码为大家介绍的非常详细,需要的朋友可以参考借鉴,下面跟着小编来一起学习学习吧。
    2017-09-09
  • 解决python中无法自动补全代码的问题

    解决python中无法自动补全代码的问题

    今天小编就为大家分享一篇解决python中无法自动补全代码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12

最新评论