# `Sidereon.Astro.Anomaly`
[🔗](https://github.com/neilberkman/sidereon-ex/blob/main/lib/sidereon/astro/anomaly.ex#L1)

Kepler anomaly conversions and two-body propagation for classical elements.

# `kepler_solution`

```elixir
@type kepler_solution() :: %{anomaly: float(), iterations: non_neg_integer()}
```

# `scalar_result`

```elixir
@type scalar_result() :: {:ok, float()} | {:error, atom()}
```

# `eccentric_to_mean`

```elixir
@spec eccentric_to_mean(number(), number()) :: scalar_result()
```

Eccentric anomaly to mean anomaly.

# `eccentric_to_mean!`

# `eccentric_to_true`

```elixir
@spec eccentric_to_true(number(), number()) :: scalar_result()
```

Eccentric anomaly to true anomaly.

# `eccentric_to_true!`

# `mean_to_eccentric`

```elixir
@spec mean_to_eccentric(number(), number()) :: scalar_result()
```

Mean anomaly to eccentric anomaly.

# `mean_to_eccentric!`

# `mean_to_true`

```elixir
@spec mean_to_true(number(), number()) :: scalar_result()
```

Mean anomaly to true anomaly.

# `mean_to_true!`

# `propagate_kepler`

```elixir
@spec propagate_kepler(Sidereon.OrbitalElements.t(), number(), number()) ::
  {:ok, Sidereon.OrbitalElements.t()} | {:error, term()}
```

Propagate classical elements by `dt_s` under two-body Kepler motion.

# `propagate_kepler!`

# `solve_kepler`

```elixir
@spec solve_kepler(number(), number()) :: {:ok, kepler_solution()} | {:error, atom()}
```

Solve Kepler's equation for the middle anomaly.

# `solve_kepler!`

# `true_to_eccentric`

```elixir
@spec true_to_eccentric(number(), number()) :: scalar_result()
```

True anomaly to eccentric anomaly.

# `true_to_eccentric!`

# `true_to_mean`

```elixir
@spec true_to_mean(number(), number()) :: scalar_result()
```

True anomaly to mean anomaly.

# `true_to_mean!`

---

*Consult [api-reference.md](api-reference.md) for complete listing*
