闭合导线近似平差及坐标计算

计算过程

 

 

代码

#0.输入数据
import sys

n=input("输入测站数:")
n=int(n)
J_x_1,J_y_1=input("输入J1测站的坐标(以空格分隔):").split()
J_x_1,J_y_1=float(J_x_1),float(J_y_1)
D_list=[]
for i in range(n):
    d=input("输入第%d个测站间距离:"%(i+1))
    d=float(d)
    D_list.append(d)

import math
def dms_to_radians():
    #获取度分秒
    degrees_str=input("输入度数:")
    minutes_str=input("输入分数:")
    seconds_str=input("输入秒数:")
    #转化为数字
    degrees=float(degrees_str)
    minutes=float(minutes_str)
    seconds=float(seconds_str)
    #计算弧度
    radians=math.radians(degrees+(minutes/60)+(seconds/3600))
    return radians
print("\n输入方位角a12:")
a12=dms_to_radians()
print(a12)

user_input=input("\n确定观测角方向,输入T(左角)或F(右角):")
b_list=[]
for i in range(n):
    print("\n输入第%d个观测角:"%(i+1))
    b_=dms_to_radians()
    b_list.append(b_)

#1.计算方位角闭合差
sum_b=sum(b_list)
f_b=sum_b-((n-2)*math.pi)
print("\n方位角闭合差为:",f_b)
f_b_limit=(40/3600)*(math.pi/180)*math.sqrt(n)
print("理论限差为:",f_b_limit)
f_b_abs=abs(f_b)
if(f_b_abs<f_b_limit):
    print("\n小于图根级限差")
else:
    print("\n重测")
    sys.exit()

#2.计算改正数,分配内角和
V=-f_b/n
print("\n方位角改正数:",V)
b_list_new=list(map(lambda x:x+V,b_list))
print("\n改正后各观测角:",b_list_new)

#3.计算各边方位角
b_list_cal=b_list_new[1:]+b_list_new[:1]
a_list=[]
a_list.append(a12)
i=0
while i<=n-2:
    if user_input=="T":
        a_j=a_list[i]+b_list_cal[i]-math.pi #j=i+1
    elif user_input == "F":
        a_j=a_list[i]-b_list_cal[i]+math.pi  #j=i+1
    a_list.append(a_j)
    i+=1
print("各边方位角:",a_list)

#4.计算各边坐标增量
cos_a_list=list(map(lambda x:math.cos(x),a_list))
sin_a_list=list(map(lambda x:math.sin(x),a_list))
import numpy as np
array1=np.array(cos_a_list)
array2=np.array(sin_a_list)
array3=np.array(D_list)
diff_x=np.multiply(array1,array3)
diff_y=np.multiply(array2,array3)
print("\nx坐标增量:",diff_x)
print("y坐标增量",diff_y)

#5.计算导线闭合差
f_x=sum(diff_x)
f_y=sum(diff_y)
f=math.sqrt(f_x**2+f_y**2)
K=f/sum(D_list)
print("\n导线相对闭合差:\n",K)
if(K<1/4000):
    print("真棒")
else:
    print("\n不满足要求")
    sys.exit()

#6.分配坐标增量闭合差
v_x_list=list(map(lambda x:(-f_x/sum(D_list))*x,D_list))
v_y_list=list(map(lambda x:(-f_y/sum(D_list))*x,D_list))
print("\nx轴坐标增量闭合差:",v_x_list)
print("\ny轴坐标增量闭合差:",v_y_list)
diff_x_new=[]
diff_y_new=[]
for x,y in zip(diff_x,v_x_list):
    diff_x_new.append(x+y)
for x,y in zip(diff_y,v_y_list):
    diff_y_new.append(x+y)
print("\nx轴坐标增量:",diff_x_new)
print("\ny轴坐标增量:",diff_y_new)

#7.计算各点坐标
J_x=[]
J_x.append(J_x_1)
i=0
while(i<=n-2):
    J_x_j=diff_x_new[i]+J_x[i] #j=i+1
    J_x.append(J_x_j)
    i+=1

J_y=[]
J_y.append(J_y_1)
i=0
while(i<=n-2):
    J_y_j=diff_y_new[i]+J_y[i] #j=i+1
    J_y.append(J_y_j)
    i+=1

#8.输出各点坐标
i=0
result=[[x,y] for x,y in zip(J_x,J_y)]
for item in result:
    print("\n测站%d坐标:"%(i+1),item)
    i+=1

 例题

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值