欢迎光临
我们一直在努力

用python代码写测量学里的前方交会

1引言

前方交会是测量学中计算未知点坐标的重要方法。其核心逻辑是:在两已知坐标点(P1 和P2)上观测到未知点(P)的角度,利用三角关系推算出 P 点的坐标。

2经典方法

常规办法是求得P1P2的距离和方位角等元素,最后求坐标增量,方法繁琐涉及到求平方根等运算。

3用向量思想解决问题

前方交会示意图

如图所示,设点P1,P2坐标分别是(x1,y1),(x2,y2),两个夹角分别是a1,a2,则P1P2的向量是 (x2-x1,y2-y1),向量P1P0是向量P1P2逆时针旋转角度a1,再进行一定的伸缩得到。 伸缩比例系数k利用正弦定理可以获得,即: k=sina2/sin(a1+a2); 平面向量的逆时针旋转公式是: 向量逆时针旋转公式 因此我们可以写出代码求得P0的坐标; a;向量旋转;b:向量缩放;

向量逆时针旋转
import math

def rotate_vector_counterclockwise(x, y, angle_deg):
"""
将平面向量 (x, y) 逆时针旋转指定角度,返回旋转后的坐标
参数:
x (float): 原向量的x坐标
y (float): 原向量的y坐标
angle_deg (float): 逆时针旋转的角度(角度制,如90、45、180等)
返回:
tuple: 旋转后的(x', y')坐标,保留3位小数(可根据需要调整)
"""

# 将角度转换为弧度(math库的三角函数仅支持弧度)
angle_rad = math.radians(angle_deg)
# 计算三角函数值
cos_theta = math.cos(angle_rad)
sin_theta = math.sin(angle_rad)
# 应用逆时针旋转公式
x_new = x * cos_theta y * sin_theta
y_new = x * sin_theta + y * cos_theta
# 保留6位小数,避免浮点数精度问题导致的超长小数
return round(x_new, 3), round(y_new, 3)

得到向量(x_new,y_new)后再进行缩放;

import math

def vector_stretch(x, y, angle_deg1,angle_deg2):
#度转为弧度
rad1=math.randians(angle_deg1)
rad2=math.randians(angle_deg2)
#求和向量缩放比例系数
k=math.sin(rad1)/math.sin(rad1+rad2)
#比例尺系数乘以原向量
return x*k,y*k

利用上述两个函数,带入已知坐标和两个角度,可算出旋转后的向量P1P0,即测量学里的坐标增量,坐标增量加P1坐标可得到未知点P0的坐标。

赞(0)
未经允许不得转载:171主机测评 » 用python代码写测量学里的前方交会
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址