Source code for autopew.transform.vis

import matplotlib.patches
import matplotlib.pyplot as plt
import matplotlib.transforms
import numpy as np

from .affine import affine_transform


[docs]def vis(A, ax=None): """ Visualise the effect of an affine transfrom on a unit square. Parameters ------------- A : :class:`numpy.ndarray` Affine matrix to visualise. ax : :class:`matplotlib.axes.Axes`, `None` Axes to plot on. Returns --------- :class:`matplotlib.axes.Axes` """ p = np.array([[0.0, 0.0], [0.0, 1.0], [1.0, 1.0], [1.0, 0.0], [0.0, 0.0]]) if ax is None: fig, ax = plt.subplots(1) c = matplotlib.patches.Ellipse( (0.5, 0.5), 1, 1, facecolor="None", edgecolor="k", alpha=0.5 ) ax.plot(*p.T, color="k", marker="s") ax.add_patch(c) ax.set_aspect("equal") T = affine_transform(A) ax.plot(*T(p).T, color="r", marker="s") transform = matplotlib.transforms.Affine2D() transform.set_matrix(A) c1 = matplotlib.patches.Ellipse( (0.5, 0.5), 1, 1, facecolor="None", edgecolor="r", alpha=0.5 ) c1.set_transform(transform + ax.transData) ax.add_patch(c1) return ax