Source code for aerocaps.utils.math
"""
Math utilities
"""
from math import factorial
from decimal import Decimal
import numpy as np
[docs]
def nchoosek(n: int, k: int):
r"""
Computes the mathematical combination
.. math::
n \choose k
Parameters
----------
n: int
Number of elements in the set
k: int
Number of items to select from the set
Returns
-------
:math:`n \choose k`
"""
return float(Decimal(factorial(n)) / Decimal(factorial(k)) / Decimal(factorial(n - k)))
[docs]
def bernstein_poly(n: int, i: int, t: int or float or np.ndarray):
r"""
Calculates the Bernstein polynomial for a given Bézier curve order, index, and parameter vector. The
Bernstein polynomial is described by
.. math::
B_{i,n}(t)={n \choose i} t^i (1-t)^{n-i}
Arguments
---------
n: int
Basis function degree
i: int
Basis function index
t: int, float, or np.ndarray
Parameter vector for evaluation
Returns
-------
np.ndarray
Array of values of the Bernstein polynomial evaluated for each point in the parameter vector
"""
if not 0 <= i <= n:
return 0.0 if isinstance(t, float) else np.zeros(t.shape)
return nchoosek(n, i) * t ** i * (1.0 - t) ** (n - i)