Source code for data_morph.shapes.lines.star

"""Star shape."""

import itertools

from ...data.dataset import Dataset
from ..bases.line_collection import LineCollection


[docs] class Star(LineCollection): """ Class for the star shape. .. plot:: :scale: 75 :caption: This shape is generated using the panda dataset. from data_morph.data.loader import DataLoader from data_morph.plotting.diagnostics import plot_shape_on_dataset from data_morph.shapes.lines import Star dataset = DataLoader.load_dataset('panda') shape = Star(dataset) plot_shape_on_dataset(dataset, shape, show_bounds=False, alpha=0.25) Parameters ---------- dataset : Dataset The starting dataset to morph into other shapes. """ def __init__(self, dataset: Dataset) -> None: bounds = dataset.morph_bounds.clone() bounds.align_aspect_ratio(shrink=True) (xmin, xmax), (ymin, ymax) = bounds x_range, y_range = bounds.range pts = [ [xmin, ymin + y_range * 0.625], [xmin + x_range * 0.375, ymin + y_range * 0.625], [xmin + x_range * 0.5, ymax], [xmin + x_range * 0.625, ymin + y_range * 0.625], [xmax, ymin + y_range * 0.625], [xmin + x_range * 0.6875, ymin + y_range * 0.375], [xmin + x_range * 0.8125, ymin], [xmin + x_range * 0.5, ymin + y_range * 0.25], [xmin + x_range * 0.1875, ymin], [xmin + x_range * 0.3125, ymin + y_range * 0.375], [xmin, ymin + y_range * 0.625], ] super().__init__(*list(itertools.pairwise(pts)))