Access
Convierta cualquier ángulo en un ángulo cardinal => 0, 90, 180 y 270
Mientras trabajaba en el mismo proyecto en el que llegué a necesitar:
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.
Perfeccioné la función para generar el ángulo cardinal, ya que mi necesidad real era producir ángulos para trabajar con el filtro de rotación de WIA.
Así que estaba detrás de un valor cardinal como: 0, 90, 180, 270.
¡La solución no fue muy compleja ya que podría simplemente volver a trabajar en mi función GetPositiveAngle () anterior y simplemente agregarle una rutina de redondeo!
Así nació lo siguiente:
Function GetPositiveCardinalAngle(lAngle As Long) As Long On Error GoTo Error_Handler Dim lPositiveAngle As Long ' Normalize angle to 0-359, like we previously did lPositiveAngle = ((lAngle Mod 360) + 360) Mod 360 ' Round to nearest multiple of 90 GetPositiveCardinalAngle = Round(lPositiveAngle / 90) * 90 ' Handle the special case where 360 is produced (should be 0) If GetPositiveCardinalAngle = 360 Then GetPositiveCardinalAngle = 0 Error_Handler_Exit: On Error Resume Next Exit Function Error_Handler: MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _ "Error Source: GetPositiveCardinalAngle" & 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 ahora, podemos usarlo haciendo:
Debug.print GetPositiveCardinalAngle(540) ' => 180 Debug.print GetPositiveCardinalAngle(-49) ' => 270 Debug.print GetPositiveCardinalAngle(-90) ' => 270 Debug.print GetPositiveCardinalAngle(347) ' => 0 Debug.print GetPositiveCardinalAngle(105) ' => 90 Debug.print GetPositiveCardinalAngle(225) ' => 180 Debug.print GetPositiveCardinalAngle(360) ' => 0
Esperemos que esto sea útil para algunos de ustedes.