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