坐标方位角计算公式(通用)
用极坐标法放样必须计算出测站点(仪器点)到放样点得距离和方位角,才能进行放样。
原计算公式为:
S12=sqr( (x2-x1)2+(y2-y1)2)= sqr(△x221+△y221)
A12=arcsin((y2-y1)/S12)
S12为测站点1至放样点2的距离;
A12为测站点1至放样点2的坐标方位角。
x1,y1为测站点坐标;
x2,y2为放样点坐标。
按公式A12=arcsin((y2-y1)/S12)计算出的方位角都要进行象限判断后加常数才是真正的方位角。
新计算公式为:
A12=arccos(△x21/S12)*sgn(△y21)+360°
式中sgn()为取符号函数,改公式只需加上条件(A12>360°, A12= A12-360°)就可以计算出坐标方位角,不需要进行象限判断。
我的这个公式要更好一些,计算结果就是正确结果:
SGN是正负号的函数。
括号内的数字大于零SGN()就是+号,反之就是-号。
===================================函数开始===================================
'jiaodu10(x,splitStr)函数将60进制度转换为10进制度格式.x为度数,splitStr为分隔符号,'如x为43%67%367,则splitStr为"%",参数要用双引号括起来,jiaodu10("x","%")
Function jiaodu10(x,splitStr)
If InStr(1,x,splitStr) Then
Dim s
s=Split(x,splitStr)
jiaodu10=s(0)+s(1)/60+s(2)/3600
Else
jiaodu10="错误"
End If
End Function
'--------------------------------------------------------------------------------
'jiaodu60(x,splitStr)函数将10进制度转换为60进制度格式,splitStr分隔表示
'x为数字,可以不用双引号括起来,参数splitStr要用双引号括起来iaodu10(12.31313,"-") Function jiaodu60(x,splitStr)
Dim fen,miao
Fen =Round((fen-Int(fen))*60,0)
If miao >= 60 Then
miao = miao-60
fen = fen+1
End If
jiaodu60=Int(x) & splitStr & Int(fen) & splitStr & miao
End Function
'--------------------------------------------------------------------------------
'juli(待算点纵坐标x,待算点横坐标y,测站点纵坐标m,测站点纵坐标n)用于计算距离。
Function juli(x,y,m,n)
juli=Math.Spr((x-m)^2+(y-n)^2)
End Function
'--------------------------------------------------------------------------------
'jiaodu(x,y,m,n)计算角度
Function jiaodu(x,y,m,n)
Dim dx,dy,a,jdu10
dx=x-m
dy=y-m
a=Math.Abs(Math.Atn(dy/dx) * 180 / 3.14159265)
jdu10=0
If (dx > 0) Then
If (dy > 0) Then
jdu10 = a
Else
jdu10 = 360-a
End If
Else
If (dy > 0) Then
jdu10 = 180-a
Else
jdu10 = 180+a
End If
End If
jiaodu = jiaodu60(jdu10,"-")
End Function
'===================================函数开始===================================。