#!/usr/bin/python
# coding: utf-8

#--------------------------------------------------------------------
# Fichero:  sumapolar.py
# Objetivo: Da la suma de dos números complejos en forma polar en grados
# Autor:    Pedro Reina <pedro@pedroreina.net>
# Fecha:    L.21.9.2026
# Atención: solo se ha probado en Python 2.7
# Licencia: Dominio público
#           https://creativecommons.org/publicdomain/zero/1.0/
#--------------------------------------------------------------------

#------------------------------------------------
# Módulos
#------------------------------------------------

# sin() cos() sqrt() atan2() radians() degrees()
import math

# Para leer la línea de órdenes
import sys

#------------------------------------------------
# Funciones
#------------------------------------------------

# Da la parte real de un número en forma polar
def ParteRe(Mod,Arg):
    return Mod*math.cos(Arg)

# Da la parte imaginaria de un número en forma polar
def ParteIm(Mod,Arg):
    return Mod*math.sin(Arg)

# Da el módulo de un número en forma binómica
def Modulo(a,b):
    return math.sqrt(a*a+b*b)

# Da el argumento de un número en forma binómica
def Argumento(a,b):
    return math.atan2(b,a)

# Convierte de radianes a GMS
def GMS(r):
    # Los grados, con decimales
    grados = math.degrees(r)

    # Los grados, parte entera
    Gr = int(grados)

    # Los minutos, con decimales
    minutos = 60*(grados-Gr)

    # Los minutos, parte entera
    Mn = int(minutos)

    # Los segundos, con decimales
    segundos = 60*(minutos-Mn)

    # Los segundos, redondeados
    if segundos >= 0: Sg = int(segundos+0.5)
    else: Sg = int(segundos-0.5)

    # Damos el resultado
    return str(Gr)+' '+str(Mn)+' '+str(Sg)

#------------------------------------------------
# El programa
#------------------------------------------------

# Leemos los números de la línea de órdenes
M1 = int(sys.argv[1])
A1 = int(sys.argv[2])
M2 = int(sys.argv[3])
A2 = int(sys.argv[4])

# Imprimimos los datos
print 'Primer número: módulo', M1, 'argumento', A1
print 'Segundo número: módulo', M2, 'argumento', A2

# Convertimos de grados a radianes
A1 = math.radians(A1)
A2 = math.radians(A2)

# Calculamos los datos en cartesiana
Re1 = ParteRe(M1,A1)
Im1 = ParteIm(M1,A1)
Re2 = ParteRe(M2,A2)
Im2 = ParteIm(M2,A2)

# Imprimimos los datos en cartesiana
print 'Primer número: (', Re1, ',', Im1, ')'
print 'Segundo número: (', Re2, ',', Im2, ')'

# Calculamos el resultado en cartesiana
ReFin = Re1+Re2
ImFin = Im1+Im2

# Imprimimos el resultado en cartesiana
print 'Resultado: (', ReFin, ',', ImFin, ')'

# Calculamos el resultado en polar
ModFin = Modulo(ReFin,ImFin)
ArgFin = Argumento(ReFin,ImFin)

# Pasamos el argumento a grados, minutos y segundos
ArgFin = GMS(ArgFin)

# Imprimimos el resultado en polar
print 'Resultado: módulo', ModFin, 'argumento', ArgFin
