A blog of Python-related topics and code.

The following code plots a two-dimensional object and its bounding box for several rotations about an arbitrary point. Three types of bounding box are considered: (1) the original bounding box, rotated by the same amount as the object, (2) the bounding box to that bounding box (such that its sides remain parallel to the axes), and (3) the bounding box to the rotated object with sides parallel to the axes).

A MoirĂ© pattern is an interference pattern that occurs when two grids of repeating lines or shapes are rotated by a small amount relative to one another (oblig. xkcd).

A charged particle of mass $m$ and charge $q$ moving with a velocity $\boldsymbol{v}$ in an an electric field $\boldsymbol{E}$ and a magnetic field $\boldsymbol{B}$ is subject to a Lorentz force, $\boldsymbol{F}$, given by
$$
\boldsymbol{F} = q(\boldsymbol{E} + \boldsymbol{v}\times\boldsymbol{B}).
$$
The equation of motion for a single particle is therefore given by Newton's second law as
$$
\boldsymbol{\ddot{r}} = \frac{q}{m}(\boldsymbol{E} + \boldsymbol{v}\times\boldsymbol{B}).
$$
Here we will consider a uniform magnetic field, $\boldsymbol{B} = (0,0,B)$ and zero electric field, $E=0$. In this case, the trajectory of the particle can be obtained by solving the equation of motion analytically, but here we integrate it numerically using SciPy's `integrate.odeint`

method. Assuming the particle starts off with non-zero components of its velocity parallel ($v_\parallel$) and perpendicular ($v_\perp$) to the magnetic field, it moves in a *helix*, with radius given by
$$
\rho = \frac{mv_\perp}{|q|B},
$$
known as the *Larmor* or *cyclotron* radius (or gyroradius).

Sometimes it is necessary to rotate a text annotation in a Matplotlib figure so that it is aligned with a line plotted on the figure Axes. `Axes.annotation`

takes an argument, `rotation`

, to allow a text label to be rotated, and a naive implementation might be as follows:

Two important parameters in plasma physics are the *electron Debye length*, $\lambda_{\mathrm{D}e}$, a measure of the distance over which charge-screening effects occur and deviations from quasi-neutrality are observed, and the number of paricles in a "Debye cube" (of side length $\lambda_{\mathrm{D}e}$), $N_\mathrm{D}$.