solution_031d.py

#!/usr/bin/python3
# ===================================================================
# Test galactic longitude/latitude conversion to xyz
# ===================================================================

from math import radians, sin, cos

# -------------------------------------------------------------------
# ---- convert galactic lat/lon to xyz
# -------------------------------------------------------------------

def lat_lon_to_xyz(lat,lon):

    rlat = radians(lat)        # convert to radians
    rlon = radians(lon)        # convert to radians

    x = sin(rlat) * cos(rlon)
    y = sin(rlat)
    z = cos(rlat) * cos(rlon)

    return (x,y,z)


# -------------------------------------------------------------------
# ---- main
# -------------------------------------------------------------------

if __name__ == '__main__':

    # ---------------------------------------------------------------
    # ---- test support function
    # ---------------------------------------------------------------

    def scale_and_convert_to_pixels(glat,glon,scale):

        x,y,z = lat_lon_to_xyz(glat,glon)

        # ---- scale and convert to integer (pixels)

        x = round(x * scale)
        y = round(y * scale)
        z = round(z * scale)

        return(x,y,z)

    # ---------------------------------------------------------------
    # ---- test support function
    # ---------------------------------------------------------------

    def test_lat_lon_conversion(glat,glon,scale):

        print('------------------------------------')

        xyz = scale_and_convert_to_pixels(glat,glon,scale)
        print(f'glat : {glat}')
        print(f'glon : {glon}')
        print(f'scale: {scale}')
        print(f'xyz  : {xyz}')

    # ----------------------------------------------------------------
    # ---- tests
    # ----------------------------------------------------------------

    print()
    print('---- 0, 90,180,270,360 ------------------------')
    print()
    test_lat_lon_conversion(0.0,   0.0, 100.0)
    test_lat_lon_conversion(0.0,  90.0, 100.0)
    test_lat_lon_conversion(0.0, 180.0, 100.0)
    test_lat_lon_conversion(0.0, 270.0, 100.0)
    test_lat_lon_conversion(0.0, 360.0, 100.0)

    print()
    print('----- 0 45,135,215,250 ------------------------')
    print()
    test_lat_lon_conversion(0.0,  45.0, 100.0)
    test_lat_lon_conversion(0.0, 135.0, 100.0)
    test_lat_lon_conversion(0.0, 225.0, 100.0)
    test_lat_lon_conversion(0.0, 315.0, 100.0)

    print('---- 90, 90,180,270,360 -----------------------')
    print()
    test_lat_lon_conversion(90.0,   0.0, 100.0)
    test_lat_lon_conversion(90.0,  90.0, 100.0)
    test_lat_lon_conversion(90.0, 180.0, 100.0)
    test_lat_lon_conversion(90.0, 270.0, 100.0)
    test_lat_lon_conversion(90.0, 360.0, 100.0)

    print()
    print('----- -90 45,135,215,250 ----------------------')
    print()
    test_lat_lon_conversion(-90.0,   0.0, 100.0)
    test_lat_lon_conversion(-90.0,  90.0, 100.0)
    test_lat_lon_conversion(-90.0, 180.0, 100.0)
    test_lat_lon_conversion(-90.0, 270.0, 100.0)
    test_lat_lon_conversion(-90.0, 360.0, 100.0)

    print()
    print('----- 45 45,135,215,250 -----------------------')
    print()
    test_lat_lon_conversion(45.0,  45.0, 100.0)
    test_lat_lon_conversion(45.0, 135.0, 100.0)
    test_lat_lon_conversion(45.0, 225.0, 100.0)
    test_lat_lon_conversion(45.0, 315.0, 100.0)

    print()
    print('----- -45 45,135,215,250 ----------------------')
    print()
    test_lat_lon_conversion(-45.0,  45.0, 100.0)
    test_lat_lon_conversion(-45.0, 135.0, 100.0)
    test_lat_lon_conversion(-45.0, 225.0, 100.0)
    test_lat_lon_conversion(-45.0, 315.0, 100.0)