Berechnungen Kugel

This commit is contained in:
2026-01-13 16:52:45 +01:00
parent de35fb786f
commit 39f5dbdd95

View File

@@ -1,78 +1,64 @@
import numpy as np import numpy as np
from numpy import sqrt, arctan2, sin, cos, arcsin, arccos
from numpy.typing import NDArray
from typing import Tuple
import winkelumrechnungen as wu
def cart2sph(x, y, z): def cart2sph(point: NDArray) -> Tuple[float, float, float]:
r = np.sqrt(x**2 + y**2 + z**2) x, y, z = point
phi = np.atan2(z, np.sqrt(x**2 + y**2)) r = sqrt(x**2 + y**2 + z**2)
lamb = np.atan2(y, x) phi = arctan2(z, sqrt(x**2 + y**2))
lamb = arctan2(y, x)
return r, np.rad2deg(phi), np.rad2deg(lamb) return r, phi, lamb
def sph2cart(r, phi, lamb): def sph2cart(r: float, phi: float, lamb: float) -> NDArray:
phi_rad = np.deg2rad(phi) x = r * cos(phi) * cos(lamb)
lamb_rad = np.deg2rad(lamb) y = r * cos(phi) * sin(lamb)
z = r * sin(phi)
x = r * np.cos(phi_rad) * np.cos(lamb_rad) return np.array([x, y, z])
y = r * np.cos(phi_rad) * np.sin(lamb_rad)
z = r * np.sin(phi_rad)
return x, y, z
def kugel_erste_gha(R, phi_1, lamb_1, s_d, a_12): def gha1(R, phi0, lamb0, s, alpha0):
s_ = s / R
s = s_d / R lamb1 = lamb0 + arctan2(sin(s_) * sin(alpha0),
lamb_1_rad = np.deg2rad(lamb_1) cos(phi0) * cos(s_) - sin(phi0) * sin(s_) * cos(alpha0))
phi_1_rad = np.deg2rad(phi_1)
a_12_rad = np.deg2rad(a_12)
sin_satz = np.sin(s) * np.sin(a_12_rad) phi1 = arcsin(sin(phi0) * cos(s_) + cos(phi0) * sin(s_) * cos(alpha0))
sin_kos = np.cos(phi_1_rad) * np.cos(s) - np.sin(phi_1_rad) * np.sin(s) * np.cos(a_12_rad)
delta_lam = np.atan2(sin_satz, sin_kos)
lamb_2_rad = lamb_1_rad + delta_lam
phi_2_rad = np.asin(np.sin(phi_1_rad) * np.cos(s) + np.cos(phi_1_rad) * np.sin(s) * np.cos(a_12_rad)) return phi1, lamb1
sin_satz_2 = -np.cos(phi_1_rad) * np.sin(a_12_rad)
sin_kos_2 = np.sin(s) * np.sin(phi_1_rad) - np.cos(s) * np.cos(phi_1_rad) * np.cos(a_12_rad)
a_21_rad = np.atan2(sin_satz_2, sin_kos_2)
if a_21_rad < 0:
a_21_rad += 2 * np.pi
return np.rad2deg(phi_2_rad), np.rad2deg(lamb_2_rad), np.rad2deg(a_21_rad)
def kugel_zweite_gha(R, phi_1, lamb_1, phi_2, lamb_2): def gha2(R, phi0, lamb0, phi1, lamb1):
phi_1_rad = np.deg2rad(phi_1) s_ = arccos(sin(phi0) * sin(phi1) + cos(phi0) * cos(phi1) * cos(lamb1 - lamb0))
lamb_1_rad = np.deg2rad(lamb_1) s = R * s_
phi_2_rad = np.deg2rad(phi_2)
lamb_2_rad = np.deg2rad(lamb_2)
sin_satz_1 = np.cos(phi_2_rad) * np.sin(lamb_2_rad - lamb_1_rad) alpha0 = arctan2(cos(phi1) * sin(lamb1 - lamb0),
sin_kos_1 = np.cos(phi_1_rad) * np.sin(phi_2_rad) - np.sin(phi_1_rad) * np.cos(phi_2_rad) * np.cos(lamb_2_rad - lamb_1_rad) cos(phi0) * sin(phi1) - sin(phi0) * cos(phi1) * cos(lamb1 - lamb0))
a_12_rad = np.atan2(sin_satz_1, sin_kos_1)
kos = np.sin(phi_1_rad) * np.sin(phi_2_rad) + np.cos(phi_1_rad) * np.cos(phi_2_rad) * np.cos(lamb_2_rad - lamb_1_rad) alpha1 = arctan2(-cos(phi0) * sin(lamb1 - lamb0),
s = np.acos(kos) cos(phi1) * sin(phi0) - sin(phi1) * cos(phi0) * cos(lamb1 - lamb0))
s_d = R * s if alpha1 < 0:
alpha1 += 2 * np.pi
sin_satz_2 = -np.cos(phi_1_rad) * np.sin(lamb_2_rad - lamb_1_rad) return alpha0, alpha1, s
sin_kos_2 = np.cos(phi_2_rad) * np.sin(phi_1_rad) - np.sin(phi_2_rad) * np.cos(phi_1_rad) * np.cos(lamb_2_rad - lamb_1_rad)
a_21_rad = np.atan2(sin_satz_2, sin_kos_2)
if a_21_rad < 0:
a_21_rad += 2 * np.pi
return s_d, np.rad2deg(a_12_rad), np.rad2deg(a_21_rad)
if __name__ == "__main__": if __name__ == "__main__":
R = 6378815.904 # Bern R = 6378815.904 # Bern
phi_1 = 10 phi0 = wu.deg2rad(10)
lamb_1 = 40 lamb0 = wu.deg2rad(40)
a_12 = 100 alpha0 = wu.deg2rad(100)
s = 10000 s = 10000
phi_2, lamb_2, _ = kugel_erste_gha(R, phi_1, lamb_1, s, a_12) phi1, lamb1 = gha1(R, phi0, lamb0, s, alpha0)
alpha0_g, alpha1, s_g = gha2(R, phi0, lamb0, phi1, lamb1)
phi1 = wu.rad2deg(phi1)
lamb1 = wu.rad2deg(lamb1)
alpha0_g = wu.rad2deg(alpha0_g)
alpha1 = wu.rad2deg(alpha1)
print(kugel_erste_gha(R, phi_1, lamb_1, s, a_12)) pass
print(kugel_zweite_gha(R, phi_1, lamb_1, phi_2, lamb_2))