diff --git a/kugel.py b/kugel.py index 931af68..70427bb 100644 --- a/kugel.py +++ b/kugel.py @@ -1,78 +1,64 @@ 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): - r = np.sqrt(x**2 + y**2 + z**2) - phi = np.atan2(z, np.sqrt(x**2 + y**2)) - lamb = np.atan2(y, x) +def cart2sph(point: NDArray) -> Tuple[float, float, float]: + x, y, z = point + r = sqrt(x**2 + y**2 + z**2) + 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): - phi_rad = np.deg2rad(phi) - lamb_rad = np.deg2rad(lamb) +def sph2cart(r: float, phi: float, lamb: float) -> NDArray: + x = r * cos(phi) * cos(lamb) + y = r * cos(phi) * sin(lamb) + z = r * sin(phi) - x = r * np.cos(phi_rad) * np.cos(lamb_rad) - y = r * np.cos(phi_rad) * np.sin(lamb_rad) - z = r * np.sin(phi_rad) - - return x, y, z + return np.array([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 - lamb_1_rad = np.deg2rad(lamb_1) - phi_1_rad = np.deg2rad(phi_1) - a_12_rad = np.deg2rad(a_12) + lamb1 = lamb0 + arctan2(sin(s_) * sin(alpha0), + cos(phi0) * cos(s_) - sin(phi0) * sin(s_) * cos(alpha0)) - sin_satz = np.sin(s) * np.sin(a_12_rad) - 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 + phi1 = arcsin(sin(phi0) * cos(s_) + cos(phi0) * sin(s_) * cos(alpha0)) - 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)) - - 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) + return phi1, lamb1 -def kugel_zweite_gha(R, phi_1, lamb_1, phi_2, lamb_2): - phi_1_rad = np.deg2rad(phi_1) - lamb_1_rad = np.deg2rad(lamb_1) - phi_2_rad = np.deg2rad(phi_2) - lamb_2_rad = np.deg2rad(lamb_2) +def gha2(R, phi0, lamb0, phi1, lamb1): + s_ = arccos(sin(phi0) * sin(phi1) + cos(phi0) * cos(phi1) * cos(lamb1 - lamb0)) + s = R * s_ - sin_satz_1 = np.cos(phi_2_rad) * np.sin(lamb_2_rad - lamb_1_rad) - 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) - a_12_rad = np.atan2(sin_satz_1, sin_kos_1) + alpha0 = arctan2(cos(phi1) * sin(lamb1 - lamb0), + cos(phi0) * sin(phi1) - sin(phi0) * cos(phi1) * cos(lamb1 - lamb0)) - 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) - s = np.acos(kos) - s_d = R * s + alpha1 = arctan2(-cos(phi0) * sin(lamb1 - lamb0), + cos(phi1) * sin(phi0) - sin(phi1) * cos(phi0) * cos(lamb1 - lamb0)) + if alpha1 < 0: + alpha1 += 2 * np.pi - sin_satz_2 = -np.cos(phi_1_rad) * np.sin(lamb_2_rad - lamb_1_rad) - 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) + return alpha0, alpha1, s if __name__ == "__main__": R = 6378815.904 # Bern - phi_1 = 10 - lamb_1 = 40 - a_12 = 100 + phi0 = wu.deg2rad(10) + lamb0 = wu.deg2rad(40) + alpha0 = wu.deg2rad(100) 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)) - print(kugel_zweite_gha(R, phi_1, lamb_1, phi_2, lamb_2)) \ No newline at end of file + pass \ No newline at end of file