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:

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.

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