Meine alten Sachen aus RALV

This commit is contained in:
2025-10-15 11:32:56 +02:00
commit c89b932d55
17 changed files with 763 additions and 0 deletions

107
GHA/gauss.py Normal file
View File

@@ -0,0 +1,107 @@
from numpy import sin, cos, pi, sqrt, tan, arcsin, arccos, arctan
import ausgaben as aus
def gha1(re, phi_p1, lambda_p1, A_p1, s, eps):
"""
Berechnung der 1. Geodätische Hauptaufgabe nach Gauß´schen Mittelbreitenformeln
:param re: Klasse Ellipsoid
:param phi_p1: Breite Punkt 1
:param lambda_p1: Länge Punkt 1
:param A_p1: Azimut der geodätischen Linie in Punkt 1
:param s: Strecke zu Punkt 2
:param eps: Abbruchkriterium für Winkelgrößen
:return: Breite, Länge, Azimut von Punkt 2
"""
t = lambda phi: tan(phi)
eta = lambda phi: sqrt(re.e_ ** 2 * cos(phi) ** 2)
F1 = lambda A, phi, s: 1 + (2 + 3 * t(phi)**2 + 2 * eta(phi)**2) / (24 * re.N(phi) ** 2) * sin(A) ** 2 * s ** 2 \
+ (t(phi)**2 - 1) * eta(phi) ** 2 / (8 * re.N(phi) ** 2) * cos(A) ** 2 * s ** 2
F2 = lambda A, phi, s: 1 + t(phi) ** 2 / (24 * re.N(phi) ** 2) * sin(A) ** 2 * s ** 2 \
- (1 + eta(phi)**2 - 9 * eta(phi)**2 * t(phi)**2) / (24 * re.N(phi) ** 2) * cos(A) ** 2 * s ** 2
F3 = lambda A, phi, s: 1 + (1 + eta(phi)**2) / (12 * re.N(phi) ** 2) * sin(A) ** 2 * s ** 2 \
+ (3 + 8 * eta(phi)**2) / (24 * re.N(phi) ** 2) * cos(A) ** 2 * s ** 2
phi_p2_i = lambda A, phi: phi_p1 + cos(A) / re.M(phi) * s * F1(A, phi, s)
lambda_p2_i = lambda A, phi: lambda_p1 + sin(A) / (re.N(phi) * cos(phi)) * s * F2(A, phi, s)
A_p2_i = lambda A, phi: A_p1 + sin(A) * tan(phi) / re.N(phi) * s * F3(A, phi, s)
phi_p0_i = lambda phi2: (phi_p1 + phi2) / 2
A_p1_i = lambda A2: (A_p1 + A2) / 2
phi_p0 = []
A_p0 = []
phi_p2 = []
lambda_p2 = []
A_p2 = []
# 1. Näherung für P2
phi_p2.append(phi_p1 + cos(A_p1) / re.M(phi_p1) * s)
lambda_p2.append(lambda_p1 + sin(A_p1) / (re.N(phi_p1) * cos(phi_p1)) * s)
A_p2.append(A_p1 + sin(A_p1) * tan(phi_p1) / re.N(phi_p1) * s)
while True:
# Berechnug P0 durch Mittelbildung
phi_p0.append(phi_p0_i(phi_p2[-1]))
A_p0.append(A_p1_i(A_p2[-1]))
# Berechnung P2
phi_p2.append(phi_p2_i(A_p0[-1], phi_p0[-1]))
lambda_p2.append(lambda_p2_i(A_p0[-1], phi_p0[-1]))
A_p2.append(A_p2_i(A_p0[-1], phi_p0[-1]))
# Abbruchkriterium
if abs(phi_p2[-2] - phi_p2[-1]) < eps and \
abs(lambda_p2[-2] - lambda_p2[-1]) < eps and \
abs(A_p2[-2] - A_p2[-1]) < eps:
break
nks = 5
for i in range(len(phi_p2)):
print(f"P2[{i}]: {aus.gms('phi', phi_p2[i], nks)}\t{aus.gms('lambda', lambda_p2[i], nks)}\t{aus.gms('A', A_p2[i], nks)}")
if i != len(phi_p2)-1:
print(f"P0[{i}]: {aus.gms('phi', phi_p0[i], nks)}\t\t\t\t\t\t\t\t{aus.gms('A', A_p0[i], nks)}")
return phi_p2, lambda_p2, A_p2
def gha2(re, phi_p1, lambda_p1, phi_p2, lambda_p2):
"""
Berechnung der 2. Geodätische Hauptaufgabe nach Gauß´schen Mittelbreitenformeln
:param re: Klasse Ellipsoid
:param phi_p1: Breite Punkt 1
:param lambda_p1: Länge Punkt 1
:param phi_p2: Breite Punkt 2
:param lambda_p2: Länge Punkt 2
:return: Länge der geodätischen Linie, Azimut von P1 nach P2, Azimut von P2 nach P1
"""
t = lambda phi: tan(phi)
eta = lambda phi: sqrt(re.e_ ** 2 * cos(phi) ** 2)
phi_0 = (phi_p1 + phi_p2) / 2
d_phi = phi_p2 - phi_p1
d_lambda = lambda_p2 - lambda_p1
f_A = lambda phi: (2 + 3*t(phi)**2 + 2*eta(phi)**2) / 24
f_B = lambda phi: ((t(phi)**2 - 1) * eta(phi)**2) / 8
# f_C = lambda phi: (t(phi)**2) / 24
f_D = lambda phi: (1 + eta(phi)**2 - 9 * eta(phi)**2 * t(phi)**2) / 24
F1 = lambda phi: d_phi * re.M(phi) * (1 - f_A(phi) * d_lambda ** 2 * cos(phi) ** 2 -
f_B(phi) * d_phi ** 2 / re.V(phi) ** 4)
F2 = lambda phi: d_lambda * re.N(phi) * cos(phi) * (1 - 1 / 24 * d_lambda ** 2 * sin(phi) ** 2 +
f_D(phi) * d_phi ** 2 / re.V(phi) ** 4)
s = sqrt(F1(phi_0) ** 2 + F2(phi_0) ** 2)
A_0 = arctan(F2(phi_0) / F1(phi_0))
d_A = d_lambda * sin(phi_0) * (1 + (1 + eta(phi_0) ** 2) / 12 * s ** 2 * sin(A_0) ** 2 / re.N(phi_0) ** 2 +
(3 + 8 * eta(phi_0) ** 2) / 24 * s ** 2 * cos(A_0) ** 2 / re.N(phi_0) ** 2)
A_p1 = A_0 - d_A / 2
A_p2 = A_0 + d_A / 2
A_p2_p1 = A_p2 + pi
return s, A_p1, A_p2_p1