%-------------------------- % @Author: Jingqiao Hu % @Date: 2021-12-28 21:34:40 % @LastEditTime: 2022-05-09 21:13:55 % 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(c_nodes, c_tets, ... MMCs, epsilon, c_nnbEdgeIDX, c_interPolySeed, microx) 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 % figure; camlight;lighting gouraud % Heaviside parfor ele = 1 : ncvt H = Heaviside_simply(c_phi{ele}, epsilon); % FF = reshape(c_phi{ele}, microx+1, microx+1, microx+1); % x = c_nodes{ele}(:,1); % y = c_nodes{ele}(:,2); % z = c_nodes{ele}(:,3); % x = reshape(x, microx+1,microx+1, microx+1); % y = reshape(y, microx+1,microx+1, microx+1); % z = reshape(z, microx+1,microx+1, microx+1); % % [faces,verts] = isosurface(x,y,z,phi,0); % % p=patch(isosurface(x,y,z,FF,0)); % set(p,'facecolor','[0.8 0.4 0.4]','edgecolor','none'); % p=patch(isocaps(x,y,z,FF,0,'FaceColor','red')); % set(p,'facecolor','[0.8 0.4 0.4]','edgecolor','none'); % view([10 25]) % axis equal; axis tight; % xlabel('x axis'); % ylabel('y axis'); % zlabel('z axis'); % hold on; % sum(c_rho{ele} > 0.1) faces = c_tets{ele}; c_rho{ele} = sum(H(faces), 2) / size(faces,2); % sum(c_rho{ele} > 0.5) 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