lib/azan/math_utils.ex

defmodule Azan.MathUtils do
  @moduledoc """
  Documentation for `MathUtils`.
  """

  def normalize_to_scale(num, max) do
    num - max * Float.floor(num / max)
  end

  def unwind_angle(angle) do
    angle |> normalize_to_scale(360)
  end

  def quadrant_shift_angle(angle) when angle >= -180 and angle <= 180 do
    angle
  end

  def quadrant_shift_angle(angle) do
    angle - 360 * Float.round(angle / 360)
  end

  def sin_deg(deg) do
    deg |> Math.deg2rad() |> Math.sin()
  end

  def cos_deg(deg) do
    deg |> Math.deg2rad() |> Math.cos()
  end

  def sign(num) when num > 0, do: 1
  def sign(num) when num < 0, do: -1
  def sign(_), do: 0
end