找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 429|回复: 2

[转贴]:附和导线平差程序[QBASIC]

[复制链接]
发表于 2004-4-15 20:27:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
DECLARE FUNCTION DEG! (X!)
DECLARE FUNCTION DMS! (XX!)
DECLARE FUNCTION XCHAR$ (XX!, N!)
CLS
PRINT
PRINT " 附和导线平差程序(2.0R)"
PRINT " 作者:徐振刚"
PRINT " 1999年12月31日"
PRINT "功能:本程序可以用来进行一般导线平差计算,包括附和导线、闭合导线和支导线,其中"
PRINT " 闭合导线和支导线需对原始数据进行一定处理。"
PRINT "备注:坐标计算误差≤5mm;角度计算误差≤0.5s"
PRINT

REM N ----角度个数(包括已知方位角)
REM M ----导线边数
REM H ----允许方位角闭合差秒值
REM A ----方位角(A(0)为起始方位角)
REM D ----边长
REM X,Y ----坐标(X1,Y1;X,Y为已知坐标)
REM F0 ----方位角允许闭合差
REM F1 ----导线方位角闭合差
REM F3,F4,F----增量闭合差
REM K ----导线全长相对闭合差

PRINT "新建数据文件?(Y/N)"
LOCATE 25: PRINT "按 ESC键 返回主菜单."; TAB(60); DATE$; " "; TIME$
DO
YN$ = INKEY$
IF YN$ = "Y" OR TN$ = "y" THEN
RUN "DXPCEDIT.BAS"
ELSEIF YN$ = "N" OR YN$ = "n" THEN
EXIT DO
ELSEIF YN$=CHR$(27) THEN
RUN "MAIN.BAS"
END IF
LOOP
REM ********************************************************************************
CLS
PI = 3.141592653589793#: PU = 180 / PI
INPUT "请输入数据文件名:(DXPC.DAT)"; FILEIN$
IF FILEIN$ = "" THEN
FILEIN$ = "DXPC.DAT"
END IF
OPEN FILEIN$ FOR INPUT AS #1
INPUT #1, N, M, H
DIM B(N), D(M), A(N - 1), X(M), Y(M)
INPUT #1, X1, Y1, X, Y
FOR I = 0 TO N
INPUT #1, B(I)
B(I) = DEG(B(I))
NEXT I
FOR I = 1 TO M
INPUT #1, D(I)
NEXT I
CLOSE #1
REM ********************************************************************************
A(0) = B(0)
FOR I = 1 TO N - 1
A(I) = A(I - 1) + B(I) + 180
IF A(I) > 360 THEN
A(I) = A(I) - 360
END IF
NEXT I
F0 = H / 3600 * SQR(N - 1): F1 = A(N - 1) - B(N)
V = -1 * F1 / (N - 1)
FOR I = 1 TO N - 1
A(I) = A(I) + V * I
IF A(I) > 360 THEN
A(I) = A(I) - 360
END IF
NEXT I

S = 0: X(0) = X1: Y(0) = Y1
FOR I = 1 TO M
S = S + D(I)
X(I) = X(I - 1) + D(I) * COS(A(I) / PU)
Y(I) = Y(I - 1) + D(I) * SIN(A(I) / PU)
NEXT I
F3 = X(M) - X: F4 = Y(M) - Y: F = ABS(SQR(F3 * F3 + F4 * F4))
D = 0
FOR I = 1 TO M
D = D + D(I)
X(I) = X(I) - F3 / S * D
Y(I) = Y(I) - F4 / S * D
NEXT I
REM ********************************************************************************
PRINT "方位角允许闭合差 F0=+/-"; XCHAR$(DMS(F0), 6)
IF ABS(F1) <= F0 THEN
PRINT "导线方位角闭合差 F1= "; XCHAR$(DMS(F1), 6); " OK!"
ELSE
PRINT "导线方位角闭合差 F1= "; XCHAR$(DMS(F1), 6); " OVER LIMIT!"
END IF
PRINT "相对闭合差:"
PRINT TAB(5); "F3="; F3, "F4="; F4, "F="; F, "K=1/"; S / F
PRINT "改正后方位角:"
FOR I = 0 TO N - 1
PRINT TAB(5); "A("; I; ")="; XCHAR$(DMS(A(I)), 6)
NEXT I
PRINT "改正后坐标:"
FOR I = 0 TO M
PRINT TAB(5); "X("; I; ")="; XCHAR$(X(I), 4), TAB(30); "Y("; I; ")="; XCHAR$(Y(I), 4)
NEXT I
PRINT TAB(5); "X("; M; ")="; XCHAR$(X(M), 4), TAB(30); "Y("; M; ")="; XCHAR$(Y(M), 4)

OPEN "DXPC.OUT" FOR OUTPUT AS #1
PRINT #1, " 导线平差"
PRINT #1, TAB(25); DATE$, TIME$
PRINT #1,
PRINT #1, "方位角允许闭合差 F0=+/-"; XCHAR$(DMS(F0), 6)
IF ABS(F1) <= F0 THEN
PRINT #1, "导线方位角闭合差 F1= "; XCHAR$(DMS(F1), 6); " OK!"
ELSE
PRINT #1, "导线方位角闭合差 F1= "; XCHAR$(DMS(F1), 6); " OVER LIMIT!"
END IF
PRINT #1, "相对闭合差:"
PRINT #1, TAB(5); "F3="; F3, "F4="; F4, "F="; F, "K=1/"; S / F
PRINT #1, "改正后方位角:"
FOR I = 0 TO N - 1
PRINT #1, TAB(5); "A("; I; ")="; XCHAR$(DMS(A(I)), 6)
NEXT I
PRINT #1, "改正后坐标:"
FOR I = 0 TO M
PRINT #1, TAB(5); "X("; I; ")="; XCHAR$(X(I), 4), TAB(30); "Y("; I; ")="; XCHAR$(Y(I), 4)
NEXT I
PRINT #1, TAB(5); "X("; M; ")="; XCHAR$(X(M), 4), TAB(30); "Y("; M; ")="; XCHAR$(Y(M), 4)
CLOSE #1
REM ********************************************************************************
PRINT
PRINT "详细数据资料业已备份到 JHFY.OUT。"
PRINT
PRINT "按 ESC键 返回主菜单..."
DO
LOOP UNTIL INKEY$ = CHR$(27)
RUN "MAIN.BAS"
END

REM 将度分秒转换成度
FUNCTION DEG (X)
D = INT(X)
M = INT((X - D) * 100)
S = INT((X - D - M / 100) * 1000000) / 100
DEG = D + M / 60 + S / 3600
END FUNCTION

REM 将度转换成度分秒
FUNCTION DMS (XX)
IF XX < 0 THEN
X = -XX
ELSE
X = XX
END IF
D = INT(X)
M = INT((X - D) * 60)
S = (X - D - M / 60) * 3600
IF XX >= 0 THEN
DMS = D + M / 100 + S / 10000
ELSE
DMS = -1 * (D + M / 100 + S / 10000)
END IF
END FUNCTION

REM 以字符串形式输出保留 N 位小数的 X
FUNCTION XCHAR$ (XX, N)
X = ABS(XX)
R = INT(X)
F = INT((X - R) * 10 ^ N + .5)
TEMP$ = MID$(STR$(F), 2)
WHILE LEN(TEMP$) < N
TEMP$ = "0" + TEMP$
WEND
TEMP$ = STR$(R) + "." + TEMP$
IF XX >= 0 THEN
XCHAR$ = TEMP$
ELSE
XCHAR$ = "-" + MID$(TEMP$, 2)
END IF
END FUNCTION
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-4-16 15:13:39 | 显示全部楼层
你用过吗
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-19 23:52:17 | 显示全部楼层
天啊,都是由本人的网站上贴到这的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 12:32 , Processed in 0.185842 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表