SETQ L (* 10.0 (GETREAL "请输入计算跨径(L):\n")))
(SETQ F (* 10.0 (GETREAL "请输入矢高(f):\n")))
(SETQ G (* 10.0 (GETREAL "请输入拱肋截面高(G):\n")))
(SETQ N (* 10.0 (GETREAL "请输入坐标计算步长(N):\n")))
(SETQ K (LOG (+ M (EXPT (- (* M M) 1.0) 0.5))))
(SETQ NUM (FIX (/ L N)))
(SETQ X0 (/ L -2.0))
(COMMAND "LIMITS" '(-2000 -1000) '(2000 1000))
(COMMAND "ZOOM" "W" '(-1000 -500) '(1000 500))
(COMMAND "PLINEWID" 0)
(COMMAND "PLINE")
(SETQ FN (GETDIR (FINDFILE "XLX.LSP")))
(SETQ FN (OPEN (STRCAT FN "\\悬链线坐标.TXT") "w"))
(WRITE-LINE (STRCAT " 拱轴系数(m)为:" (RTOS (/ M 10.0) 2 4)) FN)
(WRITE-LINE (STRCAT " 计算跨径(L)为:" (RTOS (/ L 10.0) 2 4)) FN)
(WRITE-LINE (STRCAT " 矢 高 (f) 为:" (RTOS (/ F 10.0) 2 4)) FN)
(WRITE-LINE "\n 各点坐标为:" FN)
(WRITE-LINE "\n 上缘坐标 拱轴坐标 下缘坐标 水平倾角" FN)
(SETQ KS (/ (* 2.0 X0) L))
(SETQ KK (* 0.5 (+ (EXP (* KS K)) (EXP (* KS K -1.0)))))
(SETQ KK1 (* 0.5 (- (EXP (* KS K)) (EXP (* KS K -1.0)))))
(SETQ TAN (ATAN (/ (* 2.0 F K KK1) (* L (- M 1.0)))))
(SETQ Y (* (/ F (- 1.0 M)) (- KK 1.0)))
(SETQ TAN1 (- (/ PI 2.0) TAN))
(SETQ PT1 (POLAR (LIST X0 Y) TAN1 (/ G 2.0)))
(SETQ PT2 (POLAR (LIST X0 Y) TAN1 (/ G -2.0)))
(SETQ L1 (ABS (* 2.0 (NTH 0 PT1))))
(SETQ L2 (ABS (* 2.0 (NTH 0 PT2))))
(SETQ F1 (+ F (- (/ G 2.0) (- (NTH 1 PT1) Y))))
(SETQ F2 (+ F (- (- Y (NTH 1 PT2)) (/ G 2.0))))
(REPEAT (+ NUM 1)
(SETQ KS (/ (* 2.0 X0) L))
(SETQ KK (* 0.5 (+ (EXP (* KS K)) (EXP (* KS K -1.0)))))
(SETQ KK1 (* 0.5 (- (EXP (* KS K)) (EXP (* KS K -1.0)))))
(SETQ TAN (ATAN (/ (* 2.0 F K KK1) (* L (- M 1.0)))))
(SETQ Y (* (/ F (- 1.0 M)) (- KK 1.0)))
(SETQ GG1 (+ (/ G 2.0) (XLZBY F1 L1 X0 M)))
(SETQ GG2 (- (/ G 2.0) (XLZBY F2 L2 X0 M)))
(WRITE-LINE (STRCAT " " (RTOS (/ X0 10.0) 2 4) " " (RTOS (/ GG1 10.0) 2 4) " " (RTOS (/ X0 10.0) 2 4) " " (RTOS (/ Y 10.0) 2 4) " " (RTOS (/ X0 10.0) 2 4) " " (RTOS (/ GG2 10.0) 2 4) " " (RTOS (/ (* TAN 180.0) PI) 2 6)) FN)
(SETQ PT0 (LIST X0 Y 0))
(COMMAND PT0)
(SETQ X0 (+ X0 N))
)
(IF (> (ABS (- L NUM)) 0.0001)
(PROGN
(SETQ X0 (/ L 2.0))
(SETQ KS (/ (* 2.0 X0) L))
(SETQ KK (* 0.5 (+ (EXP (* KS K)) (EXP (* KS K -1.0)))))
(SETQ KK1 (* 0.5 (- (EXP (* KS K)) (EXP (* KS K -1.0)))))
(SETQ TAN (ATAN (/ (* 2.0 F K KK1) (* L (- M 1.0)))))
(SETQ Y (* (/ F (- 1.0 M)) (- KK 1.0)))
(SETQ GG1 (+ (/ G 2.0) (XLZBY F1 L1 X0 M)))
(SETQ GG2 (- (/ G 2.0) (XLZBY F2 L2 X0 M)))
(WRITE-LINE (STRCAT " " (RTOS (/ X0 10.0) 2 4) " " (RTOS (/ GG1 10.0) 2 4) " " (RTOS (/ X0 10.0) 2 4) " " (RTOS (/ Y 10.0) 2 4) " " (RTOS (/ X0 10.0) 2 4) " " (RTOS (/ GG2 10.0) 2 4) " " (RTOS (/ (* TAN 180.0) PI) 2 6)) FN)
(SETQ PT0 (LIST X0 Y 0))
(COMMAND