%-------------------------- % @Author: Jingqiao Hu % @Date: 2021-12-28 21:34:40 % @LastEditTime: 2022-05-09 21:09:42 % the mesh and MMCs are independent, % which means the MMCs is moving and the mesh remains unchanged % c_interPolySeed: the intersected polytope for each seed %-------------------------- function [c_rho, c_phi] = projection_independent_hex(c_nodes, c_tets, ... MMCs, epsilon, c_nnbEdgeIDX, c_interPolySeed) ncvt = size(c_nodes, 1); npnts = size(c_interPolySeed, 1); c_phi = init_phi(ncvt, c_nodes); c_rho = cell(ncvt, 1); for i = 1 : npnts pid = c_interPolySeed{i}; mid = c_nnbEdgeIDX{i}; for j = 1 : length(mid) mmc = MMCs(mid(j), :); t = mmc(1); sp = mmc(2:4); ep = mmc(5:7); for k = 1 : length(pid) ele = pid(k); nodes = c_nodes{ele}; phi = signed_distance(nodes, sp, ep, t); c_phi{ele} = max(phi, c_phi{ele}); end end end % Heaviside parfor ele = 1 : ncvt H = Heaviside_simply(c_phi{ele}, epsilon); faces = c_tets{ele}; c_rho{ele} = sum(H(faces), 2) / length(faces); end end function phi_cell = init_phi(ncvt, c_nodes) phi_cell = cell(ncvt, 1); parfor ele = 1:ncvt phi_cell{ele} = repmat(-1e5, size(c_nodes{ele}, 1), 1); end end