zh_CN Python

This commit is contained in:
Bigsk 2022-10-18 22:26:56 +08:00
parent e3bb2364f7
commit 4762a313af

136
zh_CN/commu_a_c.py Normal file
View File

@ -0,0 +1,136 @@
import math
import sys
sgn = lambda n: 1 if n > 0 else -1 if n < 0 else 0
fndeg = lambda d, m, s: d + sgn(d) * (m / 60 + s/ 3600)
fnacs = lambda x: math.pi / 2 - 2 * math.atan(x / (1 + math.sqrt(1 - x * x)))
def main():
print("《计算通信方位角和大圆距离程序》")
ro = 6370
while True:
tmp = input("发信点经度(度,分,秒)=")
try:
tmp = [int(t) for t in tmp.split(",")]
tlongd = fndeg(tmp[0], tmp[1], tmp[2])
except Exception as e:
print("错误:", e)
else:
break
while True:
tmp = input("发信点纬度(度,分,秒)=")
try:
tmp = [int(t) for t in tmp.split(",")]
tlatd = fndeg(tmp[0], tmp[1], tmp[2])
except Exception as e:
print("错误:", e)
else:
break
while True:
tmp = input("收信点经度(度,分,秒)=")
try:
tmp = [int(t) for t in tmp.split(",")]
rlongd = fndeg(tmp[0], tmp[1], tmp[2])
except Exception as e:
print("错误:", e)
else:
break
while True:
tmp = input("收信点纬度(度,分,秒)=")
try:
tmp = [int(t) for t in tmp.split(",")]
rlatd = fndeg(tmp[0], tmp[1], tmp[2])
except Exception as e:
print("错误:", e)
else:
break
tlong = math.radians(tlongd)
tlat = math.radians(tlatd)
rlong = math.radians(rlongd)
rlat = math.radians(rlatd)
if tlong < 0:
tlong = math.pi * 2 + tlong
if rlong < 0:
rlong = math.pi * 2 + rlong
dlong = tlong - rlong
if abs(dlong) > math.pi:
dlong = dlong - math.pi * 2 * sgn(dlong)
x = math.sin(tlat) * math.sin(rlat) + math.cos(tlat) * math.cos(rlat) * math.cos(dlong)
gcd = fnacs(x)
if gcd < 0.0000001:
gcd = 0.0000001
if math.cos(tlat) - 0.0000001 <= 0:
if tlat >= 0:
btr = 0
else:
btr = math.pi
if math.cos(rlat) - 0.0000001 > 0:
x = (math.sin(tlat) - math.sin(rlat) * math.cos(gcd)) / (math.cos(rlat) * math.sin(gcd))
brt = fnacs(x)
if dlong < 0:
brt = math.pi * 2 - brt
gcdkm = gcd * ro
btrd = math.degrees(btr)
brtd = math.degrees(brt)
else:
if rlat >= 0:
brt = 0
else:
brt = math.pi
gcdkm = gcd * ro
btrd = math.degrees(btr)
brtd = math.degrees(brt)
else:
x = (math.sin(rlat) - math.sin(tlat) * math.cos(gcd)) / (math.cos(tlat) * math.sin(gcd))
btr = fnacs(x)
if dlong > 0:
btr = math.pi * 2 -btr
if math.cos(rlat) - 0.0000001 > 0:
x = (math.sin(tlat) - math.sin(rlat) * math.cos(gcd)) / (math.cos(rlat) * math.sin(gcd))
brt = fnacs(x)
if dlong < 0:
brt = math.pi * 2 - brt
gcdkm = gcd * ro
btrd = math.degrees(btr)
brtd = math.degrees(brt)
else:
if rlat >= 0:
brt = 0
else:
brt = math.pi
gcdkm = gcd * ro
btrd = math.degrees(btr)
brtd = math.degrees(brt)
print("大圆距离为", gcdkm, "(km)")
d = int(btrd)
m = int((btrd - d) * 60)
s = (btrd - d - m / 60) * 3600
print("发信点对收信点的方位角为", d, "", m, "", s, "")
d = int(brtd)
m = int((brtd - d) * 60)
s = (brtd - d - m / 60) * 3600
print("收信点对发信点的方位角为", d, "", m, "", s, "")
if __name__ == "__main__":
while True:
main()
while True:
a = input("您是否对其他收信点继续计算?(Y/N)")
if a.lower() not in ("y", "n"):
continue
if a.lower() == "y":
break
else:
sys.exit(0)