pylib.function module

Mathematical equations.

Date

2019-11-15

Functions returns function to apply conditions.

b_spline_basis(knots, knot_span, degree)[source]

Cox-de Boor algorithm / recursion formula.

Calculate the i-th B-spline basis function of degree p: N_{i,p}(u)

Parameters
  • knots (list) – Knot vector U. m + 1 non-decreasing numbers / knots, \(u_0 <= u_1 <= u_2 <= ... <= u_m\)

  • knot_span (int) – i-th knot span

  • degree (int) – degree of B-spline basis function

Returns

B-spline basis function using variable, u in [u_0, u_m]

Return type

function

\[\begin{split}N_{i,0}(u) &= \begin{cases} 1 & \text{if } u_i \le u \lt u_{i+1} \\ 0 & \text{otherwise}\end{cases} \\ N_{i,p}(u) &= \frac{u - u_i}{u_{i+p} - u_i} N_{i,p-1}(u) + \frac{u_{i+p+1} - u}{u_{i+p+1} - u_{i+1}} N_{i+1,p-1}(u)\end{split}\]
b_spline_curve_with_knots(degree, control_points, knots)[source]

B-spline curve of degree p (order + 1) on a given set of knots.

n, m and p must satisfy m = n + p + 1.

Parameters
  • degree (int) – degree of B-spline basis functions

  • control_points (list) – control points P, n + 1 control points

  • knots (list) – Knot vector U. m + 1 non-decreasing numbers / knots, \(u_0 <= u_1 <= u_2 <= ... <= u_m\)

Returns

B-spline curve using variable, u in [u_0, u_m]

Return type

function

\[\mathbf{C}_p(u) = \sum\limits_{i=0}^{n} N_{i,p}(u) \mathbf{P}_i\]
  • open B-spline curves

    • the curve will not touch the first and last legs of the control polyline

    • the knot vector does not have any particular structure

    • for degree p, intervals [u_0, u_p) and [u_{n-p}, u_n) will not have “full support” of basis functions and are ignored when a B-spline curve is open. For open B-spline curves, the domain is inteval [u_p, u_{n-p}]

  • clamped B-spline curves, nonperiodic B-spline curves

    • the curve is tangent to the first and the last legs just like a Bézier curve

    • the first knot and the last knot must be repeated p+1 times (i. e., of multiplicity p+1)

  • closed B-spline curves

    • the start and the end of the generated curve join together forming a closed loop

    • repeating some knots and control points # TODO: which?

  • uniform B-spline curves

    • internal knots are equally spaced

  • Bézier curves

    • a B-spline with no internal knots.

See also

b_spline_knots()

b_spline_knots(control_point_spans, degree=3)[source]

B-spline knots to generate a clamped uniform B-spline curve of degree p (order + 1).

The internal knots are equally spaced (uniform B-spline curve)

Parameters
  • control_point_spans (int) – number of control points + 1

  • degree (int) – degree of B-spline basis functions (default = 3)

Returns

knot vector

Return type

tuple

circle(r)[source]

Circle

Parameters

r (float) – radius of the circle

Results

functions for x of theta and y of theta and the interval

Return type

tuple

\[\begin{split}x(\theta) = r\cos\theta \\ y(\theta) = r\sin\theta \\ \theta = \left[0, 2\pi\right]\end{split}\]
    *  *
 *      r *
*          *
*          *
 *        *
    *  *
>>> x, y = circle(20)[:2]
>>> x, y, _ = circle(20)
>>> x, y, interval = circle(20)
cosine_wave(A=1, k=1, f=1, phi=0, D=0, degree=False)[source]

A cosine wave is said to be sinusoidal, because, \(\cos(x) = \sin(x + \pi/2)\), which is also a sine wave with a phase-shift of π/2 radians. Because of this head start, it is often said that the cosine function leads the sine function or the sine lags the cosine.

Parameters
  • A (float or int) – amplitude

  • k (float or int) – (angular) wave number

  • f (float or int) – ordinary frequency

  • phi (float or int) – phase

  • D (float or int) – non-zero center amplitude

  • degree (bool) – boolean to switch between radians and degree. If False phi is interpreted in radians and if True then phi is interpreted in degrees.

Results

sine wave function of spatial variable x and optional time t

Return type

function

See also

sine_wave()

ellipse(a, b)[source]

Ellipse

Parameters
  • a (float) – semi-major axis

  • b (float) – semi-minor axis

Results

functions for x of theta and y of theta and the interval

Return type

tuple

\[\begin{split}x(\theta) = a\cos\theta \\ y(\theta) = b\sin\theta \\ \theta = \left[0, 2\pi\right]\end{split}\]
      * .*
  *   b :    *
*       :......*
*          a   *
  *          *
      *  *
>>> x, y = ellipse(10, 5)[:2]
>>> x, y, _ = ellipse(10, 5)
>>> x, y, interval = ellipse(10, 5)
epitrochoid(R, r, d)[source]

Epitrochoid

A point is attached with a distance d from the center of a circle of radius r. The circle is rolling around the outside of a fixed circle of radius R.

Parameters
  • R (float) – radius of the fixed interior circle

  • r – radius of the rolling circle outside of the fixed circle

  • d (float) – distance from the center of the exterior circle

Typre r

float

Results

functions for x of theta and y of theta and the interval

Return type

tuple

\[\begin{split}x(\theta) = (R + r)\cos\theta - d\cos\left(\frac{R+r}{r}\theta\right) \\ y(\theta) = (R + r)\sin\theta - d\sin\left(\frac{R+r}{r}\theta\right) \\ \theta = \left[0, 2\pi\right]\end{split}\]
       *  *  *
    * R         *
  *               *
 *                 *     *  *
*                   * * r      *
*                   **  ..,     *
*                   **   d      *
*                   * *        *
 *                 *     *  *
  *               *
    *          *
       *  *  *
>>> x, y = epitrochoid(3, 1, 0.5)[:2]
>>> x, y, _ = epitrochoid(3, 1, 0.5)
>>> x, y, interval = epitrochoid(3, 1, 0.5)
hypotrochoid(R, r, d)[source]

Hypotrochoid

A point is attached with a distance d from the center of a circle of radius r. The circle is rolling around the inside of a fixed circle of radius R.

Parameters
  • R (float) – radius of the fixed exterior circle

  • r – radius of the rolling circle inside of the fixed circle

  • d (float) – distance from the center of the interior circle

Typre r

float

Results

functions for x of theta and y of theta and the interval

Return type

tuple

\[\begin{split}x(\theta) = (R - r)\cos\theta + d\cos\left(\frac{R-r}{r}\theta\right) \\ y(\theta) = (R - r)\sin\theta - d\sin\left(\frac{R-r}{r}\theta\right) \\ \theta = \left[0, 2\pi\frac{\mathrm{lcm}(r, R)}{R}\right]\end{split}\]
       *  *  *
    * R         *
  *               *
 *           *  *  *
*         * r      **
*        *     ,..  *
*        *      d   *
*         *        **
 *           *  *  *
  *               *
    *          *
       *  *  *
>>> x, y = hyotrochoid(20, 6, 6)[:2]
>>> x, y, _ = hyotrochoid(20, 6, 6)
>>> x, y, interval = hyotrochoid(20, 6, 6)
sample_half_open(f, a, b, n=50, endpoint_epsilon=1e-07)[source]
sample_half_open_seq(f, x, endpoint_epsilon=1e-07)[source]
sine_wave(A=1, k=1, f=1, phi=0, D=0, degree=False)[source]

A sine wave or sinusoid is a mathematical curve that describes a smooth periodic oscillation.

Parameters
  • A (float or int) – amplitude

  • k (float or int) – (angular) wave number

  • f (float or int) – ordinary frequency

  • phi (float or int) – phase

  • D (float or int) – non-zero center amplitude

  • degree (bool) – boolean to switch between radians and degree. If False phi is interpreted in radians and if True then phi is interpreted in degrees.

Results

sine wave function of spatial variable x and optional time t

Return type

function

In general, the function is:

\[\begin{split}y(x,t) = A\sin(kx + \omega t + \varphi) + D \\ y(x,t) = A\sin(kx + 2\pi f t + \varphi) + D\end{split}\]

where:

  • A, amplitude, the peak deviation of the function from zero.

  • f, ordinary frequency, the number of oscillations (cycles) that occur each second of time.

  • ω = 2πf, angular frequency, the rate of change of the function argument in units of radians per second. If ω < 0 the wave is moving to the right, if ω > 0 the wave is moving to the left.

  • φ, phase, specifies (in radians) where in its cycle the oscillation is at t = 0.

  • x, spatial variable that represents the position on the dimension on which the wave propagates.

  • k, characteristic parameter called wave number (or angular wave number), which represents the proportionality between the angular frequency ω and the linear speed (speed of propagation) ν.

  • D, non-zero center amplitude.

The wavenumber is related to the angular frequency by:

\[k={\omega \over v}={2\pi f \over v}={2\pi \over \lambda }\]

where λ (lambda) is the wavelength, f is the frequency, and v is the linear speed.

See also

cosine_wave()

to_str(f, x=None, x_0=0, x_1=1, t=None, h=10, w=80, density=1, char_set='line')[source]

Represent functions as string frame with a specific character set. which are normed to the range of [0, 1] to

Parameters
  • f (function or list) – function or list of functions normed to the range of [0, 1]

  • h (int) – number of chars in vertical direction

  • w (int) – number of chars in horizontal direction

  • char_set (str) – either “braille” or “block”. “braille” uses Unicode Characters in the Braille Patterns Block (first index U+2800, last index U+28FF [CUDB]) and the “block” uses part of the Unicode Characters in the Block Elements Block (fisrt index U+2580, last index U+259F [CUDB]). Alias for braille is line and alias for block is histogram

Usage:
  • case dependent arguments

    • 1 quasi line plot (braille characters) f = lambda function (lambda x, t=0: …) x_1 = max x value x_0 = min x value t = time (animation)

    • 2 histogram (block characters) f = lambda function (lambda x, t=0: …) x_1 = max x value x_0 = min x value t = time (animation) chart=”histogram”

  • general arguments w = window width in number of chars density = number of data point per pixel (for line chart higher density makes thicker lines) chart = either “line” or “histogram”

Braille Patterns Block

  • Dots or pixels per character in vertical direction: 6

  • Dots or pixels per character in horizontal direction: 2

First dot (bottom left) is the zero (0) position of the function. So, a function value of zero does not mean to have zero dots but one. Example of 3 columns and 3 rows (upside down view of ‘normal’ braille/drawille position)

   |            ^ y axis
   |            |
   |   ,_____,,_____,,_____,
 7 +   | *  *|| *  *|| *  *|
 6 +   | *  *|| *  *|| *  *|
 5 +   | *  *|| *  *|| *  *|
 4 +   | *  *|| *  *|| *  *|
   |   ;=====;;=====;;=====;
 3 +   | *  *|| *  *|| *  *|
 2 +   | *  *|| *  *|| *  *|
 1 +   | *  *|| *  *|| *  *|
 0 + - | *  *|| *  *|| *  *| ---> x axis
   |   ;=====;;=====;;=====;
-1 +   | *  *|| *  *|| *  *|
-2 +   | *  *|| *  *|| *  *|
-3 +   | *  *|| *  *|| *  *|
-4 +   | *  *|| *  *|| *  *|
   |   `````````````````````
   |            |
   `-----+--+---+--+---+--+-------------
        -2 -1   0  1   2  3

Block Elements Block

  • Dots or pixels per character in vertical direction: 8

  • Dots or pixels per character in horizontal direction: 1

Example of 3 columns and 3 rows

   |             ^ y axis
   |             |
   |   ,_____,,_____,,_____,
15 +   | --- || --- || --- |
14 +   | --- || --- || --- |
13 +   | --- || --- || --- |
12 +   | --- || --- || --- |
11 +   | --- || --- || --- |
10 +   | --- || --- || --- |
 9 +   | --- || --- || --- |
 8 +   | --- || --- || --- |
   |   ;=====;;=====;;=====;
 7 +   | --- || --- || --- |
 6 +   | --- || --- || --- |
 5 +   | --- || --- || --- |
 4 +   | --- || --- || --- |
 3 +   | --- || --- || --- |
 2 +   | --- || --- || --- |
 1 +   | --- || --- || --- |
 0 + - | --- || --- || --- | ---> x axis
   |   ;=====;;=====;;=====;
-1 +   | --- || --- || --- |
-2 +   | --- || --- || --- |
-3 +   | --- || --- || --- |
-4 +   | --- || --- || --- |
-5 +   | --- || --- || --- |
-6 +   | --- || --- || --- |
-7 +   | --- || --- || --- |
-8 +   | --- || --- || --- |
   |   `````````````````````
   |             |
   `------+------+------+---------------
         -1      0      1

References

CUDB(1,2)

Unicode Database - Blocks

See also

transformation()

transformation(f, scale_vertical=1, scale_horizontal=1, shift_horizontal=0, shift_vertical=0)[source]

Transform functions.

Parameters
  • f (function or list) – function or list of functions

  • scale_vertical – “a” scale factor in vertical direction (default = 1)

  • scale_horizontal – “b” scale factor in horizontal direction (default = 1)

  • shift_horizontal – “c” shift factor in horizontal direction (default = 0)

  • shift_vertical – “d” shift factor in vertical direction (default = 0)

Returns

transformed function or list of transformed functions

Return type

function or list

\[y = a \, f(b\,(x-c)) + d\]