☞测量_偏角法:已知座标,求平距和方位角(座标反算)
mfp吧
全部回复
仅看楼主
level 13
help
@language:simplified_chinese
一、已知座标,求平距和方位角(座标反算): 公式: D=((Xp-Xo)**2+(Yp-Yo)**2 )**0.5;α=arctan(Yp-Yo)/(Xp-Xo)
@end
endh
function pju()
variable a,b,c,d,m,n,x,y
a=input("?测站点坐标:x0=")
b=input("?测站点坐标:y0=")
variable a0=input("?计算结果保留小数点后位数:Fix»")
print("\n")
return zbf(a0,a,b,x,y)
endf
function zbf(a0,a,b,x,y)
x=input("?待测点坐标:x1=")
y=input("?待测点坐标:y1=")
variable g=input("?输入g值;输出角度值(0)|输出度分秒值(else):"+"g=")
variable m=x-a,n=y-b,d,c,z,q,t
solve d,c
d==ceil(sqrt((m**2+n**2)),a0+1)
c==atand(n/m)
slvreto z
if(m<0)
q=180+z[0,1]
elseif(n>0)
q=z[0,1]
else
q=360+z[0,1]
endif
t=iff(g==0,round(q,a0),dms_(round(q,a0)))
print("»»平距d="+round(d,a0)+"\n"+"»»方位角j°="+t+"\n")
sleep(3000)
variable k=input("\n"+"?输入k值;结束(0)|继续(else):"+"k=")
if(k!=0)
return zbf(a0,a,b,x,y)
else
return "Function Over"
endif
endf
2016年03月04日 11点03分 1
level 13
function dms(d,m,s)
if(and(and(m>=0,m<60),and(s>=0,s<60)))
return d+m/60+s/3600
else
throw "输入错误!"
return
endif
endf
function dms_(d)
variable a1,a2,a3,a4
a1=floor(d,0)
a2=d-a1
a3=floor(60*a2,0)
a4=60*(60*a2-a3)
return a1+"d"+a3+"m"+a4+"s"
endf
2016年03月04日 11点03分 2
第1楼第一个程序出错,正确在第17楼
2016年10月27日 14点10分
@😄二师兄他师哥 呃,17楼被度娘删了,改为第18楼
2016年10月27日 14点10分
level 13
2016年03月04日 11点03分 3
level 1
zan
2016年03月11日 05点03分 4
level 13
function cl_dyx_pjf()
variable m,r,a,t,l,e,d,q,p,z,n
m=input("?k(JD)»")
r=input("?R»")
a=input("?dms(度值,分值,秒值)»")
variable a0=input("?计算结果保留小数点后位数:Fix»")
t=r*tand( 0.5*a )
l=r*a*pi/180
e=r*(1/cosd( 0.5*a )-1)
d=2*t-l
print("»»t="+round(t,a0)+"\n"+"»»l="+round(l,a0)+"\n"+"»»e="+round(e,a0)+"\n"+"»»d="+round(d,a0)+"\n")
z=m-t
p=z+l
q=p-0.5*l
print("»»k(ZY)="+round(z,a0)+"\n"+"»»k(QZ)="+round(q,a0)+"\n"+"»»k(YZ)="+round(p,a0)+"\n")
return labl(a,a0,z,p,q,r,m)
endf
function labl(a,a0,z,p,q,r,m)
variable k,b,c,g,s
k=input("?kp»")
if(or(k<z,k>p))
print("kp error"+"\n")
labl(a,a0,z,p,q,r,m)
endif
b=90*(k-z)/(r*pi)
c=2*r*sind(b)
variable a1,a2,a3,a4,a5,b1
a1=floor(b,0)
a2=b-a1
a3=floor(60*a2,0)
a4=60*(60*a2-a3)
a5=round(a4,a0)
b1=a1+"d"+a3+"m"+a5+"s"
if(k<=m)
g=round(r*sind(2*b),a0)+round(r*(1-cosd(2*b)),a0)*i
s=2*b*pi*r/180
elseif(k>m)
g=round(r*sind(a-2*b),a0)+round(r*(1-cosd(a-2*b)),a0)*i
s=(a-2*b)*pi*r/180
endif
print("»»k="+k+"\n"+"»»da="+b1+"\n"+"»»c="+round(c,a0)+"\n"+"»»x+y*i="+g+"\n"+"»»s="+round(s,a0)+"\n")
sleep(3000)
variable k0=input("\n"+"?输入k0值;结束(=0)|返回主程序(<0)|继续(>0):"+"k0=")
if(k0<0)
print("‥返回主程序,修改初始数据‥"+"\n")
return cl_dyx_pjf()
elseif(k0>0)
print("‥保留数据,调用子程序继续计算‥"+"\n")
return labl(a,a0,z,p,q,r,m)
else
return "‥Function Over‥"
endif
endf
2016年07月11日 15点07分 5
level 13
function cl_pqx_ys_zdzh()
variable k,b,c,r,a,e,f,h,s,t,n,o,l,d,u,v,g,g2,w,m,q
variable a0=input("?计算结果保留小数点后位数:Fix»")
variable mat
mat=input("?[k(jd),ls1,ls2,r,pzj(dms)]»"+"\n")
k=mat[0]
b=mat[1]
c=mat[2]
r=mat[3]
a=mat[4]
e=round(b**2/24/r-b**4/2688/r**3+b**6/506880/r**5,a0)
f=round(c**2/24/r-c**4/2688/r**3+c**6/506880/r**5,a0)
g=round(b/2-b**3/240/r**2+b**5/34560/r**4,a0)
h=round(c/2-c**3/240/r**2+c**5/34560/r**4,a0)
s=round(g+(r+f-(r+e)*cosd(a))/sind(a),a0)
t=round(h+(r+e-(r+f)*cosd(a))/sind(a),a0)
n=round(r*a*pi/180-(b+c)/2,a0)
o=round((r+(e+f)/2)/(cosd(0.5*a))-r,a0)
l=round(n+b+c,a0)
d=round(s+t-n,a0)
u=round(k-s,a0)
v=round(u+b,a0)
g2=round(v+0.5*n,a0)
w=round(u+l-c,a0)
m=round(w+c,a0)
q=round(u+0.5*l,a0)
print("\n"+"曲线要素计算结果:"+"\n"+"\n")
print("P1="+e+"\n"+"P2="+f+"\n"+"Q1="+g+"\n"+"Q2="+h+"\n"+"T1="+s+"\n"+"T2="+t+"\n")
print("LY="+n+"\n"+"E="+o+"\n"+"LP="+l+"\n"+"D="+d+"\n")
print("\n"+"\n"+"主点桩计算结果:"+"\n"+"\n")
print("ZH»"+"K"+floor(u/1000,0)+"+"+(u/1000-floor(u/1000,0))*1000+"\n")
print("HY»"+"K"+floor(v/1000,0)+"+"+(v/1000-floor(v/1000,0))*1000+"\n")
print("QZ»"+"K"+floor(g2/1000,0)+"+"+(g2/1000-floor(g2/1000,0))*1000+"\n")
print("YH»"+"K"+floor(w/1000,0)+"+"+(w/1000-floor(w/1000,0))*1000+"\n")
print("HZ»"+"K"+floor(m/1000,0)+"+"+(m/1000-floor(m/1000,0))*1000+"\n")
print("PQZ»"+"K"+floor(q/1000,0)+"+"+(q/1000-floor(q/1000,0))*1000+"\n"+"\n")
sleep(3000)
variable k0=input("\n"+"?输入k0值;结束(=0)|主程序(≠0):"+"k0=")
if(k0!=0)
print("‥返回主程序,修改初始数据‥"+"\n")
return cl_pqx_ys_zdzh()
else
return "‥Function Over‥"
endif
endf
2016年07月11日 15点07分 6
level 13
function c
lz
dm()
return clzdmd()
endf
function clzdmd()
variable q,l,t,e,m,n,p,z,d,s,f,k,c,u,j,r
k=input("桩号k:")
variable mat1,mat2,mat3,mat4,mat
mat=[["k起","k终",c,d,u,j,r]]
mat1=[[0,316.64,150,421.953,-1.084,-1.186,40000]]
mat2=[[316.64,542.075,330,419.819,-1.186,0.596,1500]]
mat3=[[542.075,824.477,556.375,421.167,0.596,-1.311,1500]]
mat4=[[824.477,1250,840,417.448,-1.311,3.124,700]]
if(and(k>=mat1[0,0],k<=mat1[0,1]))
mat=mat1
endif
if(and(k>mat2[0,0],k<=mat2[0,1]))
mat=mat2
endif
if(and(k>mat3[0,0],k<=mat3[0,1]))
mat=mat3
endif
if(and(k>mat4[0,0],k<=mat4[0,1]))
mat=mat4
endif
if(or(k<mat1[0,0],k>mat4[0,1]))
variable fd1= fopen("result/cl_result.txt", "a+")
fprintf(fd1, "%s","桩号:"+k+"\n"+"kp error"+"\n")
fclose(fd1)
return "kp error"
endif
c=mat[0,2]
d=mat[0,3]
u=mat[0,4]
j=mat[0,5]
r=mat[0,6]
iff(u<j,q=1,q=-1)
l=r*abs(u-j)/100
t=0.5*l
e=t**2/(2*r)
m=c-t
n=c+t
return gcjs_(q,l,t,e,m,n,p,z,d,s,f,k,c,u,j,r)
endf
function gcjs_(q,l,t,e,m,n,p,z,d,s,f,k,c,u,j,r)
if(k<=m)
z=d+(k-c)*u/100
endif
if(and(k>m,k<=c))
p=(k-m)**2/(2*r)
z=d+(k-c)*u/100+q*p
endif
if(and(k>c,k<=n))
p=(k-n)**2/(2*r)
z=d+(k-c)*j/100+q*p
endif
if(k>n)
z=d+(k-c)*j/100
endif
print(" h(标高/米)="+round(z,3)+"\n")
variable fd= fopen("result/cl_result.txt", "a+","UTF-8")
fprintf(fd, "%s","桩号:"+k+"\n"+"h(标高/米)="+round(z,3)+"\n")
fclose(fd)
sleep(30)
return clzdm()
endf
2016年07月11日 15点07分 7
level 13
@execution_entry ::cl::suidao::cl_suidao_model()
citingspace ::cl::suidao
function cl_suidao_model()
variable choose=input("? choose(>0⇒已知b,超欠挖检测数学模型 ;<0⇒已知d,轮廓线放样数学模型;0⇒退出)\n☞","%")
if(choose==0)
return
else
variable p=input("? 检测点P坐标(m):p[x,y,z]☞","%")
variable h=input("? 隧道中线圆心O1高程(m):h☞","%")
variable z=p[2] //放样点实测高程(m):z
variable a=z-h
variable r=input("? 隧道中线处圆的理论半径(m):r☞","%")
if(choose>0)
printf("%s\n","超欠挖检测数学模型")
variable b=input("? 检测点P至隧道中线的距离(m):b☞","%")
variable cqw_dx=a/cosd(atand(b/a))-r
if(cqw_dx>=0)
printf("%s\n","P点在设计轮廓线[之外];超挖")
else
printf("%s\n","P点在设计轮廓线[之内];欠挖")
endif
printf("⇒检测点P与隧道设计轮廓线相对位移(m):\n%s%9.3f","cqw_dx=",abs(cqw_dx))
elseif(choose<0)
printf("%s\n","轮廓线放样数学模型")
variable d=input("? 检测点P至隧道中线的距离(m):d☞","%")
variable yd_dx=d-a*tand(acosd(a/r))
if(yd_dx>=0)
printf("%s\n","由P点向设计轮廓线[内移]")
else
printf("%s\n","由P点向设计轮廓线[外移]")
endif
printf("⇒现场放样点P需要向设计轮廓线内(或外)移动至放样的标准位置的位移(m):\n%s%9.3f","yd_dx=",abs(yd_dx))
else
return
endif
endif
endf
endcs
2016年10月20日 05点10分 13
level 13
function cl_suidao_model()
variable choose=input("? choose(>0⇒已知b,超欠挖检测数学模型 ;<0⇒已知d,轮廓线放样数学模型;0⇒退出)\n☞","%")
if(choose==0)
return
else
printf("%s\n%s\n%s\n%s\n","? 检测点P坐标(m):x,y","? 放样点实测高程(m):z","? 隧道中线圆心O1高程(m):h","? 隧道中线处圆O1的理论半径(m):r")
variable m=input("x,y,z,h,r=","s")
variable g=split(m,",")
variable x=evaluate(g[0])
variable y=evaluate(g[1])
variable z=evaluate(g[2])
variable h=evaluate(g[3])
variable r=evaluate(g[4])
variable a=z-h
if(choose>0)
printf("%s\n\n","»»超欠挖检测数学模型»»")
variable b=input("? 检测点P至隧道中线的距离(m):b☞","%")
variable cqw_dx=a/cosd(atand(b/a))-r
if(cqw_dx>=0)
printf("%s\n","P点在设计轮廓线[之外];超挖")
else
printf("%s\n","P点在设计轮廓线[之内];欠挖")
endif
printf("⇒检测点P与隧道设计轮廓线相对位移(m):\n%s%9.3f\n\n","cqw_dx=",abs(cqw_dx))
elseif(choose<0)
printf("%s\n\n","»»轮廓线放样数学模型»»")
variable d=input("? 检测点P至隧道中线的距离(m):d☞","%")
variable yd_dx=d-a*tand(acosd(a/r))
if(yd_dx>=0)
printf("%s\n","由P点向设计轮廓线[内移]")
else
printf("%s\n","由P点向设计轮廓线[外移]")
endif
printf("⇒现场放样点P需要向设计轮廓线内(或外)移动至放样的标准位置的位移(m):\n%s%9.3f\n\n","yd_dx=",abs(yd_dx))
else
return
endif
endif
return cl_suidao_model()
endf
2016年10月20日 09点10分 14
level 13
2016年10月20日 10点10分 15
level 13
1.坐标系
测量坐标系与数学坐标系不同。顺时针,X是垂直方向,Y是水平方向。角度的范围也跟数学坐标系不一样。最简单的记住就是X代表北方向,上北下南,左西右东。纵x⇒N,横y⇒E,x正向起,顺时针正角
2016年10月27日 02点10分 16
level 13
2016年10月30日 02点10分 19
level 13
function q4v7_ar(s)
variable p="/storage/emulated/0/AnMath/cl/"
variable n1=f_total_txt_ds(p+s)
variable row=alloc_array([n1])
for variable num=1 to n1 step 1
row[num-1]=evaluate(f_tp(p+s,"utf_8",num))
next
return row
endf
2016年11月04日 08点11分 21
level 13
//variable d="14,53,50"
//variable fix=3
function dms_to_d(d,fix)
variable z1=evaluate(split(d,",")[0])
variable z2=evaluate(split(d,",")[1])
variable z3=evaluate(split(d,",")[2])
return round(dms(z1,z2,z3),fix)
endf
//
2016年11月06日 10点11分 22
1