おこちゃんの測量プログラム

測量に役立つかもしれないBASICプログラムを公開

10.多角測量座標計算 (F-BASIC)

'***** トラバ-スの計算 *****
lprint type"dc"
'
*TRAVERS
defstr N,Q:defint I,J:defdbl A-H,K-M,O,P,R-Z
EET=1/10000000000#:EES=1.0027379#:EEE=0.006719218798677#
PI=3.141592653589793#:RAA=180#/PI:RA=206264.8062471#
dim NN$(30),XX(30),YY(30),BT(30),BD(30),BR(30),AT(30),AR(30),TT(30)
dim SM(30),TR(30),XM(30),YM(30),TM(30),SS(30),NA$(30)
def fnRRA(T)=(T*10000#-40#*(fix(T*100#)+60#*fix(T)))/RA:'---度分秒からラジアン
def fnRAA(T)=(fix(T)+fix*1*100#)/60#+(T*100#-fix(T*100#))/36#)/RAA:'---度分秒からラジアン
def fnDMS(T)=fix(T)+fix*2*60#)/100#+*3*60#-fix*4*60#))*0.006#:'-----度から度分秒へ-----
def fnDEG(T)=fix(T)+fix(((T)-fix(T))*100#)/60#+*5/36#:'-----度分秒から度へ------
'
*SENTAKU1
I=0:cls:locate 20,5:print"***** トラバ-スの計算 *****"
locate 20,8:print "放射トラバ-ス -------1"
locate 20,10:print "開放トラバ-ス -------2"
locate 20,12:print "結合トラバ-ス -------3"
locate 20,14:print "その他の計算 --------4"
locate 20,16:print "作 業 終 了 -------5"
locate 20,19:input "     番号指定        ";J
if J<1 or J>5 then *SENTAKU1
on J goto *HOUSYA,*KAIHO,*KETUGO,*SONOTA,*OWARI
'
*HOUSYA:'-------放射トラバ-ス---------
locate 15,8:print"*** 作 業 メニュウ- ***"
gosub *MENU1
on I goto *129,*SYUSEI1,*KEISAN1,*SENTAKU1
'
*129
gosub *NEURYOKU:gosub *NEURYOKU1
goto *HOUSYA
'
*KEISAN1:'-----------計 算----------
lprint:lprint:lprint:lprint:lprint:lprint
lprint "                           多角測量座標計算書(放射)":lprint:lprint
lprint using"             出発点  &       &   方向角  ####.####### ";NN$,T:lprint
lprint using"             X= #######.#####    Y= #######.##### ";XX,YY:lprint:lprint
lprint "           点名  夾 角     方向角     距 離     X     Y ":lprint
for I=1 to II
BR(I)=fnRAA(BT(I)):TR(I)=AR+BR(I):TA=TR(I)*RAA:TA(I)=fnDMS(TA)
XX(I)=XX+cos(TR(I))*SS(I):YY(I)=YY+sin(TR(I))*SS(I)
lprint using"           &   & ####.#####   ####.#####  ####.##### ####.##### #####.#####";NN$(I),BT(I),TA(I),SS(I),XX(I),YY(I)
lprint
next I
lprint chr$(12);
goto *HOUSYA
'
*SYUSEI1:'------修  正------
gosub *SYUSEI
goto *HOUSYA
'
*KAIHO:'------開放トラバ-ス--------
locate 15,8:print"*** 作 業 メニュウ- ***"
gosub *MENU1
on I goto *157,*SYUSEI2,*KEISAN2,*SENTAKU1
'
*157:cls
'
gosub *NEURYOKU:gosub *NEURYOKU1
'
goto *KAIHO
'
*KEISAN2:'-----------計 算----------
lprint:lprint:lprint:lprint:lprint:lprint
lprint "                           多角測量座標計算書(開放)":lprint:lprint
lprint using"             出発点  &       &   方向角  ####.####### ";NN$,T:lprint
lprint using"             X= #######.#####    Y= #######.##### ";XX,YY:lprint:lprint
lprint "           点名  夾 角     方向角       距 離    X     Y ":lprint
AR1=AR:XX1=XX:YY1=YY
for I=1 to II
BR(I)=fnRAA(BT(I)):TR(I)=AR1+BR(I):TA=TR(I)*RAA:TA(I)=fnDMS(TA)
if TA(I)>360# then TA(I)=TA(I)-360#
XX(I)=XX1+cos(TR(I))*SS(I):YY(I)=YY1+sin(TR(I))*SS(I)
lprint using"           &   & ####.#####   ####.#####  ####.##### ####.##### #####.#####";NN$(I),BT(I),TA(I),SS(I),XX(I),YY(I)
lprint
AR1=TR(I)+PI:TA=AR1*RAA:XX1=XX(I):YY1=YY(I)
if TA>360# then TA=TA-360#
AR1=TA/RAA
next I
lprint chr$(12);
goto *KAIHO
'
*SYUSEI2:'------修  正------
gosub *SYUSEI
goto *KAIHO
'
*KETUGO:'---------結合トラバ-ス----------
cls:locate 15,6:print"*** 作 業 メニュウ- ***"
'
'
gosub *MENU1
on I goto *100,*SYUSEI3,*KEISAN3,*SENTAKU1
'
*100:cls
gosub *NEURYOKU
NA$=NN$:XA=XX:YA=YY:TA=T:TAR=fnRAA(TA):TTA=FNDEG(TA)
'
cls:locate 20,15:input"  到着点の点名   = ";NB$
locate 20,17:input"      x、y  = ";XB,YB
locate 20,19:input"  出る方向角  tb = ";TB
TBR=fnRAA(TB):TTB=fnDEG(TB)
'
gosub *NEURYOKU1
cls:locate 20,15:input"  最終取り付け角=  ";TC
TCR=fnRAA(TC):TTC=fnDEG(TC)
'
goto *KETUGO
'
*KEISAN3:'-----------計 算----------
I=0:SM=0:BM=TTA:cls
AR1=TAR:XX1=XA:YY1=YA
for I=1 to II
BR(I)=fnRAA(BT(I)):SM=SM+SS(I):SM(I)=SM:BM=BM+fnDEG(BT(I))+180#
if BM=>360# then BM=BM-360#
if BM=>360# then BM=BM-360#
next I
JJ=II+1:TCD=BM+TTC
if TCD=>360# then TCD=TCD-360#
DB=TCD-TTB:DD=DB/JJ:RD=DD/RAA:DM=fnDMS(DD):TCC=fnDMS(TCD):DBB=fnDMS(DB)
CD=TCD-DB:TAC=fnDMS(CD)
for I=1 to II
TR(I)=AR1+BR(I)-RD:TX=TR(I)*RAA:TA(I)=fnDMS(TX):TR=TR(I)
if TA(I)>360# then TA(I)=TA(I)-360#
if TA(I)>360# then TA(I)=TA(I)-360#
XX(I)=XX1+cos(TR)*SS(I):YY(I)=YY1+sin(TR)*SS(I)
AR1=TR(I)+PI:T1=AR1*RAA:XX1=XX(I):YY1=YY(I)
next I
DX=XB-XX(II):DY=YB-YY(II)
lprint:lprint:lprint:lprint:lprint:lprint
lprint "                           多角測量座標計算書(結合)":lprint:lprint
lprint "           点名  夾 角     方向角       距 離    X     Y ":lprint
lprint using"           &   &              ####.#####             ####.##### #####.#####";NA$,TA,XA,YA:lprint
for I=1 to II
DDX=DX*SM(I)/SM(II):DDY=DY*SM(I)/SM(II):XX(I)=XX(I)+DDX:YY(I)=YY(I)+DDY
lprint using"           &   & ####.#####   ####.#####  ####.##### ####.##### #####.#####";NN$(I),BT(I),TA(I),SS(I),XX(I),YY(I)
lprint
next I
lprint using"                 ####.#####   ####.##### ";TC,TAC:lprint
lprint using"            閉合差 ##.#####   配布量 ##.#####  ⊿X ##.#####  ⊿Y ##.#####";DBB,DM*(-1#),DX*(-1#),DY*(-1#)
'
lprint chr$(12);
'
goto *KETUGO
'
*SYUSEI3:'------修  正------
'
cls:locate 25,2:print"------修  正------"
locate 20,4:print"与点1の点名 ・・・・・・・・・1"
locate 20,5:print"与点1のX、Y修正・・・・・・・2"
locate 20,6:print"与点1の方向角修正 ・・・・・・3"
locate 20,8:print"与点2の点名 ・・・・・・・・・4"
locate 20,9:print"与点2のX、Y修正・・・・・・・5"
locate 20,10:print"与点2の方向角修正 ・・・・・・6"
locate 20,12:print"求点の修正 ・・・・・・・・・・7 "
locate 20,14:print"修正の終了 ・・・・・・・・・・8"
locate 30,17:input"番号を指定    ";IJ
if IJ<1 or IJ>8 then *SYUSEI3
on IJ goto *160,*161,*162,*167,*168,*169,*KYUTEN1,*KETUGO
'
*YOTEN1:'-----与点の修正
*160:cls:locate 10,10:input "出発点名          ";NA$:goto *SYUSEI3
*161:cls:locate 10,10:input "出発点    x,y   ";XA,YA:goto *SYUSEI3
*162:cls:locate 10,10:input "出る方向角  a   ";TA
AR=fnRAA(TA):goto *SYUSEI3
*167:cls:locate 10,10:input "出発点名          ";NBN$:goto *SYUSEI3
*168:cls:locate 10,10:input "出発点    x,y   ";XB,YB:goto *SYUSEI3
*169:cls:locate 10,10:input "出る方向角  a   ";TB
AR=fnRAA(TB):goto *SYUSEI3
'
*KYUTEN1:'------求点の修正
cls:locate 20,10:input"何番目ですか。   ";J
locate 20,12:print"求点の点名修正 ・・・・・・・1"
locate 20,14:print"求点の夾角修正 ・・・・・・・2"
locate 20,16:print"求点の距離修正 ・・・・・・・3"
locate 20,18:print"終 了 ・・・・・・・・・・・4"
locate 30,21:input"番号を指定    ";I
if I<1 or I>4 then *KYUTEN
on I goto *181,*182,*183,*SYUSEI3
*181:cls:locate 20,10:input"点 名       ";NN$(J):goto *SYUSEI3
*182:cls:locate 20,10:input"夾 角         ";BT(J):goto *SYUSEI3
*183:cls:locate 20,10:input"距 離        ";SS(J):goto *SYUSEI3
'
'
goto *KETUGO
'
'------------その他の計算--------------
*SONOTA
cls:locate 15,6:print"*** その他の計算 ***"
locate 20,9:input"角 度・・・・・・・";BP
'
RA1=fnRRA(BP):RA2=fnRAA(BP):AR1=RA1*RAA:AR2=RA2*RAA
DMS1=fnDMS(AR1):DMS2=fnDMS(AR2):DEG=fnDEG(BP)
AA2=RA/3600#
'
cls:lprint:lprint:lprint:lprint:lprint
lprint "             度、分、秒とラジアンの変換計算":lprint:lprint:lprint
lprint using "            方向角  T3 = #######.######";BP:lprint
lprint using "         ラジアン       TR1= ###.##########";RA1:lprint
lprint using "         ラジアン       TR2= ###.##########";RA2:lprint
lprint using "         度分秒から度   AR1=####.##########";DEG:lprint
lprint using "                DEG    AR1=####.######";AR1:lprint
lprint using "                DEG    AR2=####.######";AR2:lprint
lprint using "                DMS      T =####.######";DMS1:lprint
lprint using "                DMS      T =####.######";DMS2:lprint
lprint using "               206264/3600 =####.########";AA2:lprint
lprint using "                180/PI   T =####.################";RAA:lprint
lprint using "                PI       T =####.################";PI:lprint
lprint chr$(12);
'
goto *ENDD1
'
*NEURYOKU:cls
locate 10,6:input "出発点名          ";NN$
locate 10,8:input "出発点    x,y   ";XX,YY
locate 10,10:input "出る方向角  a   ";T
AR=fnRAA(T)
return
'
*NEURYOKU1:I=0:cls:'-------入力-----
locate 10,5:print"   番号  点 名    夾 角    距 離 "
*96:I=I+1:II=I
locate 20,15:input"視準点名   ";NN$(I)
locate 20,16:input"夾 角         ";BT(I)
locate 20,17:input"距 離        ";SS(I)
locate  10,(5+I):print using"      ###      &     &  #####.####    ######.###";I,NN$(I),BT(I),SS(I)
'
locate 20,19:print"次の点・・・・・・・1"
locate 20,20:print"終 了・・・・・・・2"
*53:locate 22,22:input"番号を指定・・・・・";J
if J<1 or J>2 then *53
locate 30,15:print"                   "
locate 30,16:print"                   "
locate 30,17:print"                   "
locate 30,22:print"                   "
on J goto *96,*109
'
*109:return
'
*MENU1
cls:locate 15,8:print"*** 作 業 メニュウ- ***"
locate 20,12:print"デ-タの入力 ・・・・・・・1"
locate 20,14:print"デ-タの修正 ・・・・・・・2 "
locate 20,16:print"計算書の印刷 ・・・・・・・3 "
locate 20,18:print"作業の終了 ・・・・・・・・4 "
locate 30,21:input"番号を指定    ";I
if I<1 or I>4 then *MENU1
return
'
*SYUSEI:'------修  正------
cls:locate 20,6:print"与点の点名 ・・・・・・・・・1"
locate 20,8:print"与点のX、Y修正・・・・・・・2"
locate 20,10:print"与点の方向角修正 ・・・・・・3"
locate 20,12:print"求点の修正 ・・・・・・・・・4 "
locate 20,14:print"修正の終了 ・・・・・・・・・5 "
locate 30,17:input"番号を指定    ";IJ
if IJ<1 or IJ>5 then *SYUSEI1
on IJ goto *139,*140,*141,*KYUTEN,*143
'
*YOTEN:'-----与点の修正
*139:cls:locate 10,10:input "出発点名          ";NN$:goto *SYUSEI
*140:cls:locate 10,10:input "出発点    x,y   ";XX,YY:goto *SYUSEI
*141:cls:locate 10,10:input "出る方向角  a   ";T
AR=fnRAA(T):goto *SYUSEI
*143:return
'
*KYUTEN:'------求点の修正
cls:locate 20,10:input"何番目ですか。   ";J
locate 20,12:print"求点の点名修正 ・・・・・・・1"
locate 20,14:print"求点の夾角修正 ・・・・・・・2"
locate 20,16:print"求点の距離修正 ・・・・・・・3"
locate 20,18:print"終 了 ・・・・・・・・・・・4"
locate 30,21:input"番号を指定    ";I
if I<1 or I>4 then *KYUTEN
on I goto *152,*153,*154,*SYUSEI
*152:cls:locate 20,10:input"点 名       ";NN$(J):goto *SYUSEI
*153:cls:locate 20,10:input"夾 角         ";BT(J):goto *SYUSEI
*154:cls:locate 20,10:input"距 離        ";SS(J):goto *SYUSEI
'
*ENDD1
'
*OWARI
'
end
 

*1:T-fix(T

*2:T-fix(T

*3:T-fix(T

*4:T-fix(T

*5:T*100#)-fix(T*100#