Source code for monalisa.geometry._volume_element_random_partial_cartesian3_x

"""Port of src/geom3/bmVolumeElement_randomPartialCartesian3_x.m."""

import numpy as np

from monalisa._mat import vec
from monalisa.array._point_reshape import point_reshape
from monalisa.geometry._volume_element_voronoi_box2 import volume_element_voronoi_box2


[docs] def volume_element_random_partial_cartesian3_x(t, N_u, dK_u): """Volume elements of 3D Cartesian lines along x at random (y, z) positions.""" N_u, dK_u = vec(N_u), vec(dK_u) Nx = int(N_u[0]) t = np.asarray(point_reshape(t)) nLine = t.shape[1] // Nx t = np.reshape(t, (3, Nx, nLine), order="F") t1 = point_reshape(t[1:3, 0, :]) ve = volume_element_voronoi_box2(t1, N_u[1:3], dK_u[1:3]) ve = np.tile(np.ravel(ve, order="F")[None, :], (Nx, 1)) return dK_u[0] * np.ravel(ve, order="F")[None, :]