Access

Convierta cualquier ángulo en un ángulo positivo entre 0 y 359

Trabajando en un proyecto personal, necesitaba permitir que el usuario ingrese un ángulo de rotación. Quería permitir que el usuario realice cualquier entrada, pero el código que realiza la rotación solo acepta ángulos positivos, por lo que se hizo necesario crear una pequeña función simple para realizar una conversión de la entrada (por lo que cualquier valor) y obtener un valor controlado entre 0 y 359 grados.

El código

El código es ridículamente simple:

Function GetPositiveAngle(lAngle As Long) As Long
On Error GoTo Error_Handler

    ' Convert angle so they remain between 0 and 359 and are always positive values
    '   540 => 180,-90 => 270, 360 => 0
    GetPositiveAngle = ((lAngle Mod 360) + 360) Mod 360
    
Error_Handler_Exit:
    On Error Resume Next
    Exit Function
 
Error_Handler:
    MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _
           "Error Source: GetPositiveAngle" & vbCrLf & _
           "Error Number: " & Err.Number & vbCrLf & _
           "Error Description: " & Err.description & _
           Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
           , vbOKOnly + vbCritical, "An Error has Occurred!"
    Resume Error_Handler_Exit
End Function

Y luego puedes usarlo simplemente haciendo:

Ejemplo 1

Debug.Print GetPositiveAngle(540)

que devuelve

180

Ejemplo 2

Debug.Print GetPositiveAngle(-90)

que devuelve

270

Ejemplo 2

Debug.Print GetPositiveAngle(90)

que devuelve

90

Cómo funciona

Estaba teniendo dificultades para explicar cómo funcionó (tiene sentido en mi mente, pero sin las palabras) en formato textual y se rompió y pidió a AI que lo explique.

((lAngle Mod 360) + 360) Mod 360

Así que aquí fue su explicación:

Langle contra 360

Esto encuentra el resto cuando Langle se divide por 360.

Ejemplo: 540 mod 360 = 180
Ejemplo: -90 mod 360 = -90

Agregar 360

Esto asegura que el resultado no sea negativo.

Ejemplo: -90 + 360 = 270

Mod final 360

Esto asegura que el resultado esté dentro de 0 a 359.

Ejemplo: (360 + 360) Mod 360 = 0

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba