直线圆曲线坐标正反算5800程序(速度才是硬道理,不信你就试试) |
O表示起点坐标,Q表示起点方位角,Z表示起点桩号 C表示圆半径(右偏为正,左偏为负), S表示正算为桩号K为偏距, W表示反算输入坐标 N表示计算方式:1正算2反算 P=0时手动输入线元参数输入桩号调用SJK参数 rad:“NEW(0),S=”?P:(当P为零时手动输线元要素)IfP=0:Then?O(起点坐标):?Q(起点方位角):?C(半径):?Z(起点里程): ElseProg”SJK”:Ifend(否者调用数据库参数) Qπ/180→E:COS(E)+iSIN(E)→F:(将方位角转化为向量) Lbi0:Cls:“1.SZ→XY”:“2.XY→SZ”?N:IfN=1:ThenGoto1:ElseGoto2:Ifend(正反算选择) Lbi1(正算模式) Cls :(正算输入待求点里程)?S:S=0→Goto0(计算里程为零时重新选择正反算)此处为等号箭头 IfC=无穷大:(直线坐标正算)Then(S-Z)F+O→A◢(显示中桩坐标)?K(输入偏距):A+iFK◢(左桩坐标)A-iF◢(右桩坐标)Else(园线正算)S-Z→V:V/C→B:2CSIN(.5B)(COS(.5B)+iSIN(.5B))→A:COS(B)+iSIN(B)→B:AF+O→A◢(显示所求点中坐标)?k(输入平距):A+iBFK◢(左桩坐标)A-iBFK◢(右桩坐标)GOTO1 LBL 2反算模式 ?W:W=0→Goto0(W为坐标,输入零时重新选择正反算) IfC=无限大:Then(W-O)/F+Z→G:"S=":ReP(G)→I◢(反算直线里程显示)“Z=”ImP(G)→J◢(直线反算偏中显示)Else(反算园)(W-O)/F→V:V-iC→A:(ABS(A)-ABS(C))C→I:Ci+abs(C)A/ABS(A)→A:IfI=0:ThenI=J:Else-ABS(A-V)ABS(I)/I→J:(反算园的平距)Ifend AF+O→A:"S=":2Csin-1(.5ABS(O-A)/C)+Z◢(显示园反算里程): “Z=";J◢(显示园反算平距)Ifend Goto2 SJK程序名(数据库) IfP<计算线元终点And>起点里程:Then起点里程→Z:起点X+Yi→O:起点方位角→Q;半径→C:Return:Ifend ……………………..省略 有几条输几条 园曲线左偏R为负右为正,直线输10的45次方。特别强调一点本程序要在弧度制时才能正确计算,切记切记!!!! |