13.4 閉合トラバース [もくじへ] [トップページへ] [前ページへ]
===================================================
プログラム例題25
閉合トラバースのプログラムを作成せよ。
=========================================================
考え方
観測データには、いろいろな原因による誤差が含まれます。したがって、それ
から求められた方向角や座標には当然誤差を生じます。閉合トラバースが開
放トラバースと違う点は、この誤差を補正するか、補正しないかという点です。
閉合トラバースでは、方向角の誤差と、座標の誤差の2つに分けて処理します。
(1)方向角の誤差(閉合差)の処理
開放トラバースと同じように、点nまで方向角を計算します。
α1 = αA + β1 ( α1 が360°を超えたら360°を減ずる )
αn-1 = αn-2 + βn-1 + 180°( αn が360°を超えたら360°を減ずる )
閉合トラバースでは、さらに初点(点n)に戻り、 βn を測定します。
そして、
αn = αn-1 + βn + 180°
により、 αn を求め、αA との閉合差 ω を求めます。ω を測角数 n で除し
て各観測角に補正します。
もし閉合差が整除できない場合、つぎのように補正します。
ω = 9″を n = 7 で配布する場合
ω/n ≒ 1.3″
累加補正数 各角への補正数
1.3 ≒ 1 = 1″
2.6 ≒ 3 3 - 1 = 2″
3.9 ≒ 4 4 - 3 = 1″
5.2 ≒ 5 5 - 4 = 1″
6.5 ≒ 7 7 - 5 = 2″
7.8 ≒ 8 8 - 7 = 1″
9.1 ≒ 9 9 - 8 = 1″
このようにして、観測角の補正をしたあと、ふたたび方向角の計算をやり直し
ます。
(2)座標の誤差(閉合差)の処理
方向角の補正計算の後、各点の座標を次式により計算します。
Xi = Xi-1 + Sicos(αi)
Yi = Yi-1 + Sisin(αi)
最後の測点の座標と、初点座標との座標閉合差を求めます。
Ex = Xn-1 - XA
Ey = Yn-1 - YA
この座標閉合差を、各測線長(観測距離)に比例して配布します。
X座標に対する補正数 = Ex × Si /ΣS
Y座標に対する補正数 = Ey × Si /ΣS
この場合の端数は、最後の点に配布します。
このような、座標に対する閉合差の配布法をコンパス法といいます。
閉合差 ds は、
で求められます。
また、精度 h は、
h = ds / ΣS
で求められます。
プログラム
<HTML>
<HEAD>
<TITLE>例題25</TITLE>
<SCRIPT LANGUAGE="VBScript">
<!--
'
Dim an, xa, ya,
alpa '初点名,X,Y,方向角
Dim bn, xb, yb,
alpb '終点名,X,Y,方向角
Dim ii
ii = 1 '測点番号
Dim na(50),
bt(50), ds(50) '測点名,夾角,距離
Dim n '測点数
'
Dim ai(50),
x(50), y(50) '方向角,X座標,Y座標
Dim dx(50),
dy(50) 'X座標差,Y座標差
Dim PI
PI =
3.141592653589793
'
Dim w '測角誤差
Dim et(50) '夾角への補正数
Dim sex, sey 'X、Y座標誤差
Dim delts, ss '閉合差、距離合計
Dim ex(50),
ey(50) 'X、Y座標への補正数
Dim seido '精度
'
'
'クリアボタンをクリック
'
Sub INI_OnClick
Dim
i
'
document.Form1.AN.value
= ""
document.Form1.XA.value
= 0
document.Form1.YA.value
= 0
document.Form1.AA.value
= 0
'
'
document.Form1.BN.value
= ""
document.Form1.XB.value
= 0
document.Form1.YB.value
= 0
document.Form1.AB.value
= 0
'
ii
= 1
For
i=1 To 50
na(i)
= ""
bt(i)
= 0
ds(i)
= 0
Next
'
document.Form1.NO.value
= ii
document.Form1.NA.value
= na(ii)
document.Form1.BT.value
= bt(ii)
document.Form1.DS.value
= ds(ii)
End Sub
'
'
'後退ボタン(<)をクリック
'
Sub BCK_OnClick
na(ii)
= document.Form1.NA.value
bt(ii)
= CDbl(document.Form1.BT.value)
ds(ii)
= CDbl(document.Form1.DS.value)
'
ii
= ii-1
If
ii <= 0 Then ii=1
document.Form1.NO.value
= ii
document.Form1.NA.value
= na(ii)
document.Form1.BT.value
= bt(ii)
document.Form1.DS.value
= ds(ii)
End Sub
'
'
'前進ボタン(>)をクリック
'
Sub FRD_OnClick
na(ii)
= document.Form1.NA.value
bt(ii)
= CDbl(document.Form1.BT.value)
ds(ii)
= CDbl(document.Form1.DS.value)
'
ii
= ii+1
If
ii > 50 Then ii=50
document.Form1.NO.value
= ii
document.Form1.NA.value
= na(ii)
document.Form1.BT.value
= bt(ii)
document.Form1.DS.value
= ds(ii)
End Sub
'
'
' 角度の変換(度を秒に)
'
Function Dobyo( x
)
Dim
d, f, b
d
= Int(x)
f
= Int((x - d)*100)
b
= Int(((x - d)*100 - f)*100 + 0.5)
Dobyo
= d*3600 + f*60 + b
End Function
'
'
' 角度の変換(秒を度分秒に)
'
Function Byodfb(
x, doo, fun, byo )
IF
x<0 Then x = x + 1296000
doo
= Int(x/3600)
fun
= Int((x - doo*3600)/60)
byo
= x - doo*3600 - fun*60
IF
byo<0 Then byo = 0
End Function
'
'
' 四捨五入
'
Function
Rund(x,y)
Dim
sg
IF
x>=0 Then sg = 1 Else sg =-1
Rund
= sg*Int(abs(x)*10^y + 0.5)/10^y
End Function
'
'
'計算ボタンをクリック
'
Sub CAL_OnClick
Dim
i
Dim
ew, sg '測角誤差w/n、その符号
Dim
exs, eys 'X、Yの累加補正数
'
'初点データ
an
= document.Form1.AN.value
xa
= CDbl(document.Form1.XA.value)
ya
= CDbl(document.Form1.YA.value)
alpa
= CDbl(document.Form1.AA.value)
'
'終点データ
bn
= document.Form1.BN.value
xb
= CDbl(document.Form1.XB.value)
yb
= CDbl(document.Form1.YB.value)
alpb
= CDbl(document.Form1.AB.value)
'
'測点データ
na(ii)
= document.Form1.NA.value
bt(ii)
= CDbl(document.Form1.BT.value)
ds(ii)
= CDbl(document.Form1.DS.value)
'
'測点数のカウント
n
= 0
For
i = 1 To 50
If
na(i)="E" Then Exit For
n
= n + 1
Next
'
'
' *** 計算部 ***
' 角度を秒に変換
alpa
= Dobyo(alpa)
For
i = 1 To n
bt(i)
= Dobyo(bt(i))
Next
'
ai(1)
= alpa + bt(1)
Do
While ai(1)>=1296000
ai(1) = ai(1) - 1296000
Loop
For
i = 2 To n
ai(i)
= ai(i-1) + bt(i) + 648000
Do
While ai(i)>=1296000
ai(i) = ai(i) - 1296000
Loop
Next
'
w
= ai(n) - alpa
ew
= w/n
IF
ew>=0 Then sg = 1 Else sg = -1
ew
= abs(ew)
For
i = 1 To n
sewb
= Int(ew*(i-1)+0.5) '前の累加補正数
sewf
= Int(ew*i+0.5) '後の累加補正数
et(i)
= sg*(sewf - sewb)
Next
ai(1)
= alpa + bt(1) - et(1)
Do
While ai(1)>=1296000
ai(1) = ai(1) - 1296000
Loop
For
i = 2 To n
ai(i)
= ai(i-1) + bt(i)- et(i) + 648000
Do
While ai(i)>=1296000
ai(i) = ai(i) - 1296000
Loop
Next
'
ss
= 0
For
i = 1 To n-1
ss
= ss + ds(i)
Next
'
dx(1)
= Rund(ds(1)*cos(ai(1)/648000*PI),3)
dy(1)
= Rund(ds(1)*sin(ai(1)/648000*PI),3)
x(1)
= xa + dx(1)
y(1)
= ya + dy(1)
For
i = 2 To n-1
dx(i)
= Rund(ds(i)*cos(ai(i)/648000*PI),3)
dy(i)
= Rund(ds(i)*sin(ai(i)/648000*PI),3)
x(i)
= x(i-1) + dx(i)
y(i)
= y(i-1) + dy(i)
Next
'
sex
= Rund(x(n-1) - xa,3)
sey
= Rund(y(n-1) - ya,3)
exs
= 0
eys
= 0
ex(1)
= Rund(sex*ds(1)/ss,3)
exs
= exs + ex(1)
ey(1)
= Rund(sey*ds(1)/ss,3)
eys
= eys + ey(1)
x(1)
= xa + dx(1) - ex(1)
y(1)
= ya + dy(1) - ey(1)
For
i = 2 To n-2
ex(i)
= Rund(sex*ds(i)/ss,3)
exs
= exs + ex(i)
ey(i)
= Rund(sey*ds(i)/ss,3)
eys
= eys + ey(i)
x(i)
= x(i-1) + dx(i) - ex(i)
y(i)
= y(i-1) + dy(i) - ey(i)
Next
ex(n-1)
= Rund(sex - exs,3)
ey(n-1)
= Rund(sey - eys,3)
x(n-1)
= x(n-2) + dx(n-1) - ex(n-1)
y(n-1)
= y(n-2) + dy(n-1) - ey(n-1)
'
delts=Rund(Sqr(sex^2
+ sey^2),3)
IF
delts<>0 Then
seido=Rund(ss/delts,0)
Else
seido=0
End
IF
Heigo
'
End Sub
'
'
'閉合トラバース計算結果出力
'
Sub Heigo
Dim i, r
'
document.write
"<CENTER>","*** 閉合トラバース計算 ***","</CENTER><BR>"
'
document.write"<CENTER><TABLE
BORDER='1'>"
document.write"<TR
ALIGN='CENTER'><TD ALIGN='left'>","測点 ","</TD>"
document.write"<TD
ALIGN='right'>"," 夾角 ","</TD>"
document.write"<TD
ALIGN='right'>"," 方向角
","</TD>"
document.write"<TD
ALIGN='right'>"," 距離 ","</TD>"
document.write"<TD
ALIGN='right'>"," X ","</TD>"
document.write"<TD
ALIGN='right'>"," Y ","</TD></TR>"
document.write"<TR
ALIGN='CENTER'><TD ALIGN='center' ></TD>"
document.write"<TD
ALIGN='right'>"," β ","</TD>"
document.write"<TD
ALIGN='right'>"," α ","</TD>"
document.write"<TD
ALIGN='right'>"," S ","</TD>"
document.write"<TD
ALIGN='right'>"," ΔX ","</TD>"
document.write"<TD
ALIGN='right'>"," ΔY ","</TD></TR>"
document.write"<TR
ALIGN='CENTER'><TD ALIGN='center' ></TD>"
document.write"<TD
ALIGN='right'>"," δβ ","</TD>"
document.write"<TD
ALIGN='right'>"," ","</TD>"
document.write"<TD
ALIGN='right'>"," ","</TD>"
document.write"<TD
ALIGN='right'>"," δX ","</TD>"
document.write"<TD
ALIGN='right'>"," δY ","</TD></TR>"
'
'1行目
document.write"<TR
ALIGN='CENTER'><TD ALIGN='left'
>",an,"</TD>"
r =
Byodfb(bt(1),doo,fun,byo)
document.write"<TD
ALIGN='right'>",doo & "-" & fun &
"-" & byo,"</TD>"
r =
Byodfb(alpa,doo,fun,byo)
document.write"<TD
ALIGN='right'>",doo & "-" & fun &
"-" & byo,"</TD>"
document.write"<TD
ALIGN='right'>"," ","</TD>"
document.write"<TD
ALIGN='right'>",xa,"</TD>"
document.write"<TD
ALIGN='right'>",ya,"</TD></TR>"
'2行目
document.write"<TR
ALIGN='CENTER'><TD ALIGN='left' ></TD>"
document.write"<TD
ALIGN='right'>",-et(1),"</TD>"
r =
Byodfb(ai(1),doo,fun,byo)
document.write"<TD
ALIGN='right'>",doo & "-" & fun &
"-" & byo,"</TD>"
document.write"<TD
ALIGN='right'>",ds(1),"</TD>"
document.write"<TD
ALIGN='right'>",dx(1),"</TD>"
document.write"<TD
ALIGN='right'>",dy(1),"</TD></TR>"
'3行目
document.write"<TR
ALIGN='CENTER'><TD ALIGN='left' ></TD>"
document.write"<TD
ALIGN='right'>"," ","</TD>"
document.write"<TD
ALIGN='right'>"," ","</TD>"
document.write"<TD
ALIGN='right'>"," ","</TD>"
document.write"<TD
ALIGN='right'>",-ex(1),"</TD>"
document.write"<TD
ALIGN='right'>",-ey(1),"</TD></TR>"
'i
For i=1 to n-2
'iの1行目
document.write"<TR
ALIGN='CENTER'><TD ALIGN='left'
>",na(i),"</TD>"
r
= Byodfb(bt(i+1),doo,fun,byo)
document.write"<TD
ALIGN='right'>",doo & "-" & fun &
"-" & byo,"</TD>"
document.write"<TD
ALIGN='right'>"," ","</TD>"
document.write"<TD
ALIGN='right'>"," ","</TD>"
document.write"<TD
ALIGN='right'>",x(i),"</TD>"
document.write"<TD
ALIGN='right'>",y(i),"</TD></TR>"
'iの2行目
document.write"<TR
ALIGN='CENTER'><TD ALIGN='left' ></TD>"
document.write"<TD
ALIGN='right'>",-et(i+1),"</TD>"
r
= Byodfb(ai(i+1),doo,fun,byo)
document.write"<TD
ALIGN='right'>",doo & "-" & fun &
"-" & byo,"</TD>"
document.write"<TD
ALIGN='right'>",ds(i+1),"</TD>"
document.write"<TD
ALIGN='right'>",dx(i+1),"</TD>"
document.write"<TD
ALIGN='right'>",dy(i+1),"</TD></TR>"
'iの3行目
document.write"<TR
ALIGN='CENTER'><TD ALIGN='left' ></TD>"
document.write"<TD
ALIGN='right'>"," ","</TD>"
document.write"<TD
ALIGN='right'>"," ","</TD>"
document.write"<TD
ALIGN='right'>"," ","</TD>"
document.write"<TD
ALIGN='right'>",-ex(i+1),"</TD>"
document.write"<TD
ALIGN='right'>",-ey(i+1),"</TD></TR>"
Next
'n-1行目
document.write"<TR
ALIGN='CENTER'><TD ALIGN='left'
>",na(n-1),"</TD>"
r =
Byodfb(bt(n),doo,fun,byo)
document.write"<TD
ALIGN='right'>",doo & "-" & fun &
"-" & byo,"</TD>"
document.write"<TD
ALIGN='right'>"," ","</TD>"
document.write"<TD
ALIGN='right'>"," ","</TD>"
document.write"<TD
ALIGN='right'>",x(n-1),"</TD>"
document.write"<TD
ALIGN='right'>",y(n-1),"</TD></TR>"
'n行目
document.write"<TR
ALIGN='CENTER'><TD ALIGN='left' ></TD>"
document.write"<TD
ALIGN='right'>",-et(n),"</TD>"
r =
Byodfb(ai(n),doo,fun,byo)
document.write"<TD
ALIGN='right'>",doo & "-" & fun &
"-" & byo,"</TD>"
document.write"<TD
ALIGN='right'>"," ","</TD>"
document.write"<TD
ALIGN='right'>"," ","</TD>"
document.write"<TD
ALIGN='right'>"," ","</TD></TR>"
'n+1行目
document.write"<TR
ALIGN='CENTER'><TD ALIGN='right'
></TD></TR>"
'n+2行目
document.write"<TR
ALIGN='CENTER'><TD ALIGN='right' >","測角誤差
=","</TD>"
document.write"<TD
ALIGN='right'>",w,"</TD>"
document.write"<TD
ALIGN='right'>","ΔX=","</TD>"
document.write"<TD
ALIGN='right'>",sex,"</TD>"
document.write"<TD
ALIGN='right'>","ΔY=","</TD>"
document.write"<TD
ALIGN='right'>",sey,"</TD></TR>"
'n+3行目
document.write"<TR
ALIGN='CENTER'><TD ALIGN='right' >","ΣS
=","</TD>"
document.write"<TD
ALIGN='right'>",ss,"</TD>"
document.write"<TD
ALIGN='right'>","閉合差
=","</TD>"
document.write"<TD
ALIGN='right'>",delts,"</TD>"
document.write"<TD
ALIGN='right'>","精度 =
","</TD>"
document.write"<TD
ALIGN='right'>","1/",seido,"</TD></TR>"
document.write"</TABLE>"
End Sub
'
-->
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="Form1">
*** トラバース計算 ***<BR>
<BR>
初点名= <INPUT TYPE="text" NAME="AN"
size=15>
XA= <INPUT TYPE="text" NAME="XA"
size=15>
YA= <INPUT TYPE="text" NAME="YA"
size=15>
αA= <INPUT TYPE="text" NAME="AA"
size=15>
<BR>
終点名= <INPUT TYPE="text" NAME="BN"
size=15>
XB= <INPUT TYPE="text" NAME="XB"
size=15>
YB= <INPUT TYPE="text" NAME="YB"
size=15>
αB= <INPUT TYPE="text" NAME="AB"
size=15>
<BR>
番号= <INPUT TYPE="text" NAME="NO"
size=15>
点名= <INPUT TYPE="text" NAME="NA"
size=15>
測角= <INPUT TYPE="text" NAME="BT"
size=15>
距離= <INPUT TYPE="text" NAME="DS"
size=15>
<BR>
<BR>
<INPUT TYPE="button"
NAME="BCK" VALUE=" < ">
<INPUT TYPE="button" NAME="FRD"
VALUE=" > ">
<INPUT TYPE="button"
NAME="INI" VALUE="クリア">
<INPUT TYPE="button" NAME="CAL"
VALUE="計 算">
<HR>
</FORM>
</BODY>
</HTML>
入力データと実行結果
XA=100.00m, YA=100.00m, αA=300°0′0″
点名=1, β1=180°0′
0″, S1=100.00m
点名=2, β2=
60°0′ 0″, S2=100.00m
点名=A, β3=
60°0′ 0″, S3=100.00m
点名=B, β4=240°0′20″
※4点目の入力は、点名= B、夾角= 240.0020、距離= なし
※必ずクリアボタンをクリックしてから入力します。
※入力終了は、点名に E を入力して、計算ボタンをクリックします。
プログラムの説明
Dim w '測角誤差
Dim
et(50) '夾角への補正数
Dim
sex, sey 'X、Y座標誤差
Dim
delts, ss '閉合差、距離合計
Dim
ex(50), ey(50) 'X、Y座標への補正数
Dim
seido '精度
開放トラバースのプログラムに、追加したグローバル変数です。計算結果出
力のプロシージャ Heigo でも使うので、グローバル変数にします。
Sub
CAL_OnClick
Dim i, r
Dim
ew, sg '測角誤差w/n、その符号 @
Dim
exs, eys 'X、Yの累加補正数 A
'
'初点データ
an = document.Form1.AN.value
xa = CDbl(document.Form1.XA.value)
ya = CDbl(document.Form1.YA.value)
alpa = CDbl(document.Form1.AA.value)
'
'終点データ
bn = document.Form1.BN.value
xb = CDbl(document.Form1.XB.value)
yb = CDbl(document.Form1.YB.value)
alpb = CDbl(document.Form1.AB.value)
'
'測点データ
na(ii)
= document.Form1.NA.value
bt(ii)
= CDbl(document.Form1.BT.value)
ds(ii) = CDbl(document.Form1.DS.value)
'
'測点数のカウント
n = 0
For
i = 1 To 50
If na(i)="E" Then Exit For
n = n +
1
Next
'
'
' *** 計算部 ***
' 角度を秒に変換
alpa = Dobyo(alpa)
For
i = 1 To n
bt(i) = Dobyo(bt(i))
Next
'
ai(1)
= alpa + bt(1)
Do While
ai(1)>=1296000
ai(1) = ai(1) - 1296000
Loop
For
i = 2 To n
ai(i)
= ai(i-1) + bt(i) + 648000
Do While
ai(i)>=1296000
ai(i) = ai(i) - 1296000
Loop
Next
'
w
= ai(n) - alpa B
ew
= w/n C
IF
ew>=0 Then sg
= 1 Else sg = -1 D
ew = abs(ew) E
For
i = 1 To n F
sewb =
Int(ew*(i-1)+0.5) '前の累加補正数
sewf =
Int(ew*i+0.5) '後の累加補正数
et(i)
= sg*(sewf - sewb)
Next
ai(1)
= alpa + bt(1) - et(1) G
Do While
ai(1)>=1296000
ai(1) = ai(1) - 1296000
Loop
For
i = 2 To n H
ai(i)
= ai(i-1) + bt(i)- et(i) + 648000
Do While
ai(i)>=1296000
ai(i) = ai(i) - 1296000
Loop
Next
'
ss = 0
For
i = 1 To n-1 I
ss
= ss + ds(i)
Next
'
dx(1) = Rund(ds(1)*cos(ai(1)/648000*PI),3) J
dy(1) = Rund(ds(1)*sin(ai(1)/648000*PI),3)
x(1) = xa + dx(1)
y(1) = ya + dy(1)
For
i = 2 To n-1
dx(i)
= Rund(ds(i)*cos(ai(i)/648000*PI),3)
dy(i) =
Rund(ds(i)*sin(ai(i)/648000*PI),3)
x(i)
= x(i-1) + dx(i)
y(i) = y(i-1) + dy(i)
Next K
'
sex =
Rund(x(n-1) - xa,3) L
sey =
Rund(y(n-1) - ya,3) M
exs = 0
eys = 0
ex(1) = Rund(sex*ds(1)/ss,3) N
exs
= exs + ex(1)
ey(1) = Rund(sey*ds(1)/ss,3)
eys =
eys + ey(1)
x(1)
= xa + dx(1) - ex(1)
y(1) = ya + dy(1) - ey(1)
For
i = 2 To n-2
ex(i) = Rund(sex*ds(i)/ss,3)
exs
= exs + ex(i)
ey(i) = Rund(sey*ds(i)/ss,3)
eys =
eys + ey(i)
x(i)
= x(i-1) + dx(i) - ex(i)
y(i) = y(i-1) + dy(i) - ey(i)
Next
ex(n-1) = Rund(sex - exs,3)
ey(n-1) = Rund(sey - eys,3)
x(n-1)
= x(n-2) + dx(n-1) - ex(n-1)
y(n-1) = y(n-2) + dy(n-1) - ey(n-1) O
'
delts=Rund(Sqr(sex^2
+ sey^2),3) P
IF
delts<>0 Then
seido=Rund(ss/delts,0) Q
Else
seido=0
End
IF
Heigo R
'
End
Sub
計算の中心になる部分です。
@A 開放トラバースに追加したローカル変数です。このプロシージャの
中だけしか使わない変数ですから、プロシージャ内で宣言するローカル変数
にします。
B これより前の部分は、開放トラバースと同じです。閉合トラバースで
は、「終点の方向角と初点の方向角が同じ」という条件がありますので、その
差をとり測角誤差を求めます。
C 1点当たりの測角誤差を求めています。
DE 測角誤差の符号を取り、その絶対値を求めます。四捨五入しながら、
各点に配布する誤差(これを補正値といいます)を求めるので、プラスの値で
計算し後で元の符号に戻すようにしてあります。
F このループで各点に配布する補正値を求めます。その点までの累加
補正数から、1つ前までの累加補正数を減じて、その点に対する配布補正値
を求めます。
GH このループで、方向角を補正します。
I 距離の合計を求めます。ss = 0 のように、まず合計する変数をクリ
アした方が安全です。
J〜K 開放トラバースと同じで補正する前のXY座標を求めます。
LM 閉合トラバースでは、「終点の座標と初点の座標が同じ」という条件
がありますので、その差をとり閉合差を求めます。ここで、終点の番号は n-1
である点に注意してください。
NO 各座標に対する補正値を計算しながら、補正した座標を求めます。
変数 exs と eys は、それぞれ最後のX座標とY座標の1つ前の点までの配
布量を合計する変数です。これを求めると、最後の点にのこりの補正値をす
べて配布できます。
P 閉合差を求めます。
Q 精度の分母数を求めます。
R 計算結果出力のプロシージャに飛びます。
Sub Heigo
・
・
・
End Sub
計算結果出力のプロシージャです。開放トラバースのプログラムに角度と座
標の補正値を追加しています。また、測角誤差、ΔX、ΔY、ΣS、閉合差、
精度を表示できるように、プログラムを追加してあります。
りょうかんのアドバイス
プログラミングが初めてという方には、閉合トラバースはちょっと難しくなりまし
たね。角度誤差とXY座標誤差の補正を取り入れるだけで、こんなに複雑にな
りました。
「プログラムなんて、やーめた。りょうかんは、よくこんなに難しいプログラムが
作れるもんだ。おれには無理だ。」なんて言わないでくださいね。
実は、このプログラムを作るのに3日かかりました。ずぅーと考え続けて3日で
す。測点の番号と観測データとの関係がややっこしくて、何回も図を画いてみ
たり、プログラムを書き換えてみたり、そりゃー大変な無駄な?苦労をしたの
ですよ。最初からスラスラとできたのではないのです。
難しい数学の問題が解けなかったとき、参考書の似たような問題の解説を見
ますね。しかし、またその解説が分からなくてイライラするということがありませ
んでしたか。りょうかんのプログラムは、初めてプログラムを作る人にとって、
そんな参考書の解説のように見えるかもしれません。でも、そこであきらめたら
いけません。では、どうするか? 自分で、最初から作ってみるのです。動くよ
うになるまで。
一度自分の力で作ってしまうと、あとは面白くなってプログラム作りにはまるは
ずです。こんなに楽しいあそびがあったのかと・・・。がんばってくださいね。
さて、ここでプログラムを作る時、りょうかんが気を付けていることを2、3挙げた
いと思います。
1.データは、何回も入力するのはたいへんなので、最初は代入文にする。完
全に動くのを確めたら、入力フォームを接続する。
2.最初から何でも欲張らない。あれも、これもできるようにと欲を出すとプログ
ラミングの効率が悪くなる。
3.コメント(注釈)を多く入れる。後で見た時、分かるように。
4.いろんなデータでチェックする。面倒がらずに。
・
・
・
次回は、『結合トラバース』の予定です。(10月5日ごろ)
この講座に対する、ご意見やご要望はメールか掲示板・伝言板でお願
いします。
『VBScriptによる測量計算プログラミング入門』
講師 大愚良寛