Angle.DMS (angle v1.0.1)

Functions relating to dealing with angles in Degrees, Minutes and Seconds.

Link to this section Summary

Functions

Convert the angle to it's absolute value by discarding complete revolutions and converting negatives.

Ensure that a DMS representation is present for this angle, otherwise calculate one.

Initialize an Angle from integer d degrees.

Initialize an Angle from integer d degrees, optionally followed by integer m minutes.

Initialize an Angle from integer d degrees, followed by integer m minutes and s seconds.

Attempt to parse a string of degrees, minutes and seconds.

Returns the DMS representation of the Angle.

Link to this section Functions

@spec abs(Angle.t()) :: Angle.t()

Convert the angle to it's absolute value by discarding complete revolutions and converting negatives.

Examples

iex> ~a(-270,15,45)dms
...> |> Angle.DMS.abs()
#Angle<90° 45 15>

iex> ~a(1170,0,0)dms
...> |> Angle.DMS.abs()
#Angle<90°>
@spec ensure(Angle.t()) :: Angle.t()

Ensure that a DMS representation is present for this angle, otherwise calculate one.

Examples

iex> ~a(90.5)d
...> |> ensure()
...> |> Map.get(:dms)
{90, 30, 0.0}

iex> ~a(166.7662400)d
...> |> ensure()
...> |> Map.get(:dms)
{166, 45, 58.464000000037686}

iex> ~a(1.579522973054868)r
...> |> ensure()
...> |> Map.get(:dms)
{90, 30, 0.0}

iex> ~a(100.55555555555556)g
...> |> ensure()
...> |> Map.get(:dms)
{90, 30, 0.0}
@spec init(integer()) :: Angle.t()

Initialize an Angle from integer d degrees.

Examples

iex> init(13)
#Angle<13°>
@spec init(integer(), integer()) :: Angle.t()

Initialize an Angle from integer d degrees, optionally followed by integer m minutes.

Examples

iex> init(13, 30)
#Angle<13° 30>
@spec init(integer(), integer(), number()) :: Angle.t()

Initialize an Angle from integer d degrees, followed by integer m minutes and s seconds.

Examples

iex> init(13, 30, 45)
#Angle<13° 30 45>
@spec parse(String.t()) :: {:ok, Angle.t()} | {:error, term()}

Attempt to parse a string of degrees, minutes and seconds.

Examples

iex> "166 45 58.46" |> parse() |> inspect()
"{:ok, #Angle<166° 45′ 58.46″>}"

iex> "166,45,58.46" |> parse() |> inspect()
"{:ok, #Angle<166° 45′ 58.46″>}"

iex> "166° 45′ 58.46″" |> parse() |> inspect()
"{:ok, #Angle<166° 45′ 58.46″>}"

iex> "166°45′58.46″" |> parse() |> inspect()
"{:ok, #Angle<166° 45′ 58.46″>}"

iex> "-166° 45′ 58.46″" |> parse() |> inspect()
"{:ok, #Angle<-166° 45′ 58.46″>}"
@spec to_dms(Angle.t()) :: {Angle.t(), {integer(), integer(), number()}}

Returns the DMS representation of the Angle.

Examples

iex> ~a(0.5)r
...> |> to_dms()
...> |> inspect()
"{#Angle<28.64788975654116°>, {28, 38, 52.403123548181156}}"