#!/usr/bin/python3
# ===================================================================
# test rotating the point of interest in galactic lat/long
# to the +z axis and converting it to x,y,x coordinates
# ===================================================================
import user_interface as ui
import transformation_matrix as tm
import coordinate_conversion as cc
from math import radians, sin, cos
import sys, os, platform
min_poi_latitude = -90.0 # degrees
max_poi_latitude = +90.0 # degrees
min_poi_longitude = +0.0 # degrees
max_poi_longitude = +360.0 # degrees
# -------------------------------------------------------------------
# ---- get user's Point of Interest (POI)
# -------------------------------------------------------------------
def get_user_poi():
ui.clear_screen()
# --- galactic longitude
print()
print('Enter POI galactic longitude in degrees (0.0 to 360.0)')
print('Enter nothing to exit program')
while(True):
print()
s = ui.get_user_input('Enter POI longitude: ')
if not s:
sys.exit()
tf,poilon = ui.is_float(s)
if tf != True or \
poilon < min_poi_longitude or \
poilon > max_poi_longitude:
print('illegal longitude - try again')
continue
break
# ---- poi latitude
print()
print('Enter POI gala tic latitude in degrees (-90.0 to +90.0)')
print('Enter nothing to exit program')
while(True):
print()
s = ui.get_user_input('Enter POI latitude: ')
if not s:
sys.exit()
tf,poilat = ui.is_float(s)
if tf != True or \
poilat < min_poi_latitude or \
poilat > max_poi_latitude:
print()
print()
print('illegal latitude - try again')
continue
break
return (poilat,poilon)
# -------------------------------------------------------------------
# ---- convert galactic lat/lon to x,y,z coordinates
# ---- (unit vector is radius of sphere)
# -------------------------------------------------------------------
def lat_lon_to_xyz(glat,glon):
rlat = radians(glat) # convert to radians
rlon = radians(glon) # convert to radians
x = sin(rlat) * cos(rlon)
y = sin(rlat)
z = cos(rlat) * cos(rlon)
return (x, y, z)
# -------------------------------------------------------------------
# ----
# -------------------------------------------------------------------
def galactic_rotation_matrix(glat,glon):
lat_mtrx = tm.get_x_rotation_matrix_3d(glat)
lon_mtrx = tm.get_y_rotation_matrix_3d(-glon)
mtrx = lat_mtrx @ lon_mtrx
return mtrx
# -------------------------------------------------------------------
# ---- main
# -------------------------------------------------------------------
if __name__ == '__main__':
while(True):
ui.clear_screen()
lat,lon = get_user_poi()
print(f'lat = {lat}')
print(f'lon = {lon}')
mtrx = galactic_rotation_matrix(lat,lon)
x,y,z = lat_lon_to_xyz(lat,lon)
print(f'initial coordinates')
print(f'x = {round(x,6)}')
print(f'y = {round(y,6)}')
print(f'z = {round(z,6)}')
print('rotate to the +Z axes')
xyz = mtrx @ (x,y,z,1)
print(f'final coordinates')
print(f'x = {round(xyz[0],6)}')
print(f'y = {round(xyz[1],6)}')
print(f'z = {round(xyz[2],6)}')
ui.pause()