Featured image of post Rumbos y Azimutales, un script en Python para convertirlos.

Rumbos y Azimutales, un script en Python para convertirlos.

Este pequeño programa en Python convierte Azimutales a Rumbos, es un buen ejercicio de programación y también muestra como hacer una interfaz gráfica.

Todos hemos visto una brújula, pero pocos saben usarla correctamente (me incluyo). El detalle es que actualmente la mayoría de los teléfonos celulares cuentan con una brújula en la que la lectura es azimutal (de 0 a 360º). De esa forma es sencillo establecer una dirección (o rumbo) a partir de nuestra posición.

Brújula de una aplicación en android - Rumbos y Azimutales

Brújula de una aplicación en android - Rumbos y Azimutales

Pero existe la costumbre de establecer un rumbo partiendo de cuadrantes, empezando por el norte o sur, indicando un número de grados hacia el este o el oeste. Por ejemplo, 281º azimutales serían N 79º W.

Si, lo se, suena algo complicado, pero este tipo de problemas me gustan mucho, mezclar algo de geometría con programación es la onda. Así que me puse a hacer un pequeño programa en Python que haga la conversión entre un rumbo azimutal (o circular) a un rumbo cuadrantal.

Las operaciones son diferentes dependiendo de en que cuadrante se encuentre la lectura azimutal. Agregué los rumbos francos que son el norte, sur, este y el oeste. Y además un mensaje de error en caso de que se introduzca un valor fuera de rango.

El código

Una vez que hice la función, me di a la tarea de construirle una sencilla interfaz gráfica usando PySimpleGUI , no es la interfaz más bonita, pero es realmente sencillo de hacer, me tomó una mañana más o menos entenderle a la construcción de la interfaz y al manejo de eventos.

#! /usr/bin/env python3

import PySimpleGUI as sg

# Esta función hace la conversión de grados azimutales a rumbos.
def azimutal_rumbo(azimutal):
    # Rumbos Francos
    if (azimutal == 0) or (azimutal == 360):
        rumbo = 'N'
    elif azimutal == 90:
        rumbo = 'E'
    elif azimutal == 180:
        rumbo = 'S'
    elif azimutal == 270:
        rumbo = 'W'
    #Identificar los cuadrantes.
    #Cuadrante I
    elif (azimutal > 0) and (azimutal < 90):
        rumbo = 'N ' + str(azimutal)  +'º E'
    #Cuadrante II
    elif (azimutal > 90) and (azimutal < 180):
        rumbo = 'S ' + str(180 - azimutal) + 'º E'
    #Cuadrante III
    elif (azimutal > 180) and (azimutal < 270):
        rumbo = 'S ' + str(azimutal - 180) + 'º W'
    #Cuadrante IV
    elif (azimutal > 270) and (azimutal < 360):
        rumbo = 'N ' + str(360 - azimutal) + 'º W'
    else:
        rumbo = 'Valor Incorrecto'

    return rumbo

# Construir la interfaz gráfica.
sg.theme('SystemDefault')
layout = [
    [sg.Text('Teclear el rumbo azimutal [0-360º]:',font='Default 12')],
    [sg.InputText(key='-GRADOSAZ-', size=(10,1), font='Default 12')],
    [sg.Button('Convertir', font='Default 12')],
    [sg.Text(size=(20,1), font='Default 18 bold', key='-RUMBO-')]]

window = sg.Window('Azimutales a Rumbos').Layout(layout)

while True:                             # The Event Loop
    event, values = window.read()
    # print(event, values)
    if event in (None, 'Exit'):
        break
    if event == 'Convertir':
        # Update the "output" text element to be the value of "input" element
        resultado = azimutal_rumbo(int(values['-GRADOSAZ-']))
        window['-RUMBO-'].update(resultado)

window.close()
El programa haciendo la conversión de azimutales a rumbos.

El programa haciendo la conversión de azimutales a rumbos.

Les quiero pedir disculpas si no uso los términos adecuados, no soy topógrafo, así que si existe una mejor manera de nombrar las cosas o si ofrecen algún consejo en cuanto a la programación les agradeceré su comentario.

Para entender mejor.

Licensed under CC BY-NC-SA 4.0
Última actualización 17 ene. 2020 117:00 CST
Todas las imágenes, nombres de productos y nombres de empresa o logotipos citados en esta página web son propiedad de sus respectivos propietarios.
Creado con Hugo
Tema Stack diseñado por Jimmy