Source code for monalisa.geometry._volume_element_voronoi_box2

"""Port of src/geom2/bmVolumeElement_voronoi_box2.m."""

import numpy as np

from monalisa._mat import colon, vec
from monalisa.array._point_reshape import point_reshape
from monalisa.geometry._voronoi import voronoi


[docs] def volume_element_voronoi_box2(t, N_u, d_u): """Voronoi areas of 2D points bounded by a frame of extra points around the grid ``N_u`` with step ``d_u``.""" N_u = vec(N_u) d_u = vec(d_u) t = np.asarray(point_reshape(t), dtype=np.float64) nPt = t.shape[1] Nx, Ny = N_u[0] + 1, N_u[1] + 1 ys = colon(-(Ny / 2), Ny / 2 - 1) xs = colon(-(Nx / 2 - 1), Nx / 2 - 2) p1 = np.vstack([-(Nx / 2) * np.ones(int(Ny)) * d_u[0], ys * d_u[1]]) p2 = np.vstack([(Nx / 2 - 1) * np.ones(int(Ny)) * d_u[0], ys * d_u[1]]) p3 = np.vstack([xs * d_u[0], -(Ny / 2) * np.ones(int(Nx - 2)) * d_u[1]]) p4 = np.vstack([xs * d_u[0], (Ny / 2 - 1) * np.ones(int(Nx - 2)) * d_u[1]]) ve = voronoi(np.concatenate([t, p1, p2, p3, p4], axis=1)) return ve[:, :nPt]