meshless_voronoi 0.7.2

An implementation of the Meshless Voronoi algorithm.
Documentation
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
from pathlib import Path
import h5py


def read_faces(fname: Path) -> np.ndarray:
    data = h5py.File(fname, "r")
    start = data["Faces/Start"][:][:, :2]
    end = data["Faces/End"][:][:, :2]
    return np.stack([start, end], axis=1)


def read_generators(fname: Path) -> np.ndarray:
    data = h5py.File(fname, "r")
    return data["Cells/Generator"][:]


def read_centroids(fname: Path) -> np.ndarray:
    data = h5py.File(fname, "r")
    return data["Cells/Centroid"][:]


def plot(faces: np.ndarray, generators=None, centroids=None):
    lines = LineCollection(faces, color="r", lw=1)
    fig, ax = plt.subplots(figsize=(6, 6))
    ax.add_collection(lines)
    ax.set_aspect("equal")
    ax.set_xlim(
        min([f[:, 0].min() for f in faces]), max([f[:, 0].max() for f in faces])
    )
    ax.set_ylim(
        min([f[:, 1].min() for f in faces]), max([f[:, 1].max() for f in faces])
    )
    if generators is not None:
        ax.scatter(generators[:, 0], generators[:, 1], c="green", s=0.5)
    if centroids is not None:
        ax.scatter(centroids[:, 0], centroids[:, 1], c="blue", s=0.5)
    ax.axis("off")
    fig.tight_layout()
    fig.savefig("test.png", dpi=300)


def main(fname):
    plot(
        faces=read_faces(fname),
        generators=read_generators(fname),
        centroids=read_centroids(fname),
    )


if __name__ == "__main__":
    main("test_2_d.hdf5")