Umrechnung ell cart

This commit is contained in:
2025-10-21 14:19:40 +02:00
parent cc5996e174
commit dcf1780f44
3 changed files with 59 additions and 8 deletions

View File

@@ -120,8 +120,63 @@ class EllipsoidTriaxial:
return cls(ax, ay, b)
def ell2cart(self, beta, lamb, u):
s1 = u**2 - self.b**2
s2 = -self.ay**2 * np.sin(beta)**2 - self.b**2 * np.cos(beta)**2
s3 = -self.ax**2 * np.sin(lamb)**2 - self.ay**2 * np.cos(lamb)**2
"""
Panou 2014 12ff.
:param beta: ellipsoidische Breite
:param lamb: ellipsoidische Länge
:param u: Höhe
:return: kartesische Koordinaten
"""
beta = wu.deg2rad(beta)
lamb = wu.deg2rad(lamb)
x = np.sqrt(u**2 + self.ex**2) * np.sqrt(np.cos(beta)**2 + self.ee**2/self.ex**2 * np.sin(beta)**2)
# s1 = u**2 - self.b**2
# s2 = -self.ay**2 * np.sin(beta)**2 - self.b**2 * np.cos(beta)**2
# s3 = -self.ax**2 * np.sin(lamb)**2 - self.ay**2 * np.cos(lamb)**2
# print(s1, s2, s3)
x = np.sqrt(u**2 + self.ex**2) * np.sqrt(np.cos(beta)**2 + self.ee**2/self.ex**2 * np.sin(beta)**2) * np.cos(lamb)
y = np.sqrt(u**2 + self.ey**2) * np.cos(beta) * np.sin(lamb)
z = u * np.sin(beta) * np.sqrt(1 - self.ee**2/self.ex**2 * np.cos(lamb)**2)
return x, y, z
def cart2ell(self, x, y, z):
"""
Panou 2014 15ff.
:param x:
:param y:
:param z:
:return:
"""
c2 = self.ax**2 + self.ay**2 + self.b**2 - x**2 - y**2 - z**2
c1 = (self.ax**2 * self.ay**2 + self.ax**2 * self.b**2 + self.ay**2 * self.b**2 -
(self.ay**2+self.b**2) * x**2 - (self.ax**2 + self.b**2) * y**2 - (self.ax**2 + self.ay**2) * z**2)
c0 = (self.ax**2 * self.ay**2 * self.b**2 - self.ay**2 * self.b**2 * x**2 -
self.ax**2 * self.b**2 * y**2 - self.ax**2 * self.ay**2 * z**2)
p = (c2**2 - 3*c1) / 9
q = (9*c1*c2 - 27*c0 - 2*c2**3) / 54
omega = np.arccos(q / np.sqrt(p**3))
s1 = 2 * np.sqrt(p) * np.cos(omega/3) - c2/3
s2 = 2 * np.sqrt(p) * np.cos(omega/3 - 2*np.pi/3) - c2/3
s3 = 2 * np.sqrt(p) * np.cos(omega/3 - 4*np.pi/3) - c2/3
# print(s1, s2, s3)
beta = np.arctan(np.sqrt((-self.b**2 - s2) / (self.ay**2 + s2)))
lamb = np.arctan(np.sqrt((-self.ay**2 - s3) / (self.ax**2 + s3)))
u = np.sqrt(self.b**2 + s1)
return beta, lamb, u
if __name__ == "__main__":
ellips = EllipsoidTriaxial.init_name("Eitschberger1978")
# ellips = EllipsoidTriaxial.init_name("Bursa1972")
# carts = ellips.ell2cart(10, 30, 6378172)
# ells = ellips.cart2ell(carts[0], carts[1], carts[2])
carts = ellips.ell2cart(90, 0, 6356754.4)
# print(aus.gms("beta", ells[0], 3), aus.gms("lambda", ells[1], 3), "u =", ells[2])
pass