%-------------------------- % @Author: Jingqiao Hu % @Date: 2021-12-26 23:23:06 % @LastEditTime: 2021-12-29 20:53:27 % for each voronoi cell % update the MMC variables based on voronoi-edges & nodes %-------------------------- function [MMCs, MMCs_poly] = update_MMCs(MMCs_edges, MMCs_nodes, t0) npnts = size(MMCs_edges, 1); MMCs = cell(npnts, 1); MMCs_poly = cell(npnts, 1); % figure; parfor ele = 1 : npnts % MMCs variables edges = MMCs_edges{ele}; nodes = MMCs_nodes{ele}; nodes1 = nodes(edges(:, 1), :); nodes2 = nodes(edges(:, 2), :); nodes3 = (nodes1 + nodes2) / 2; x = nodes3(:,1); y = nodes3(:,2); len = vecnorm(nodes2 - nodes1, 2, 2); sina = abs(nodes2(:,2) - nodes1(:,2)) ./ len; dir = (nodes2(:,2) < nodes1(:,2)) .* (nodes2(:,1) < nodes1(:,1)) + ... (nodes2(:,2) > nodes1(:,2)) .* (nodes2(:,1) > nodes1(:,1)); sina(dir < 1) = -sina(dir < 1); t = repmat(t0, size(edges, 1), 3); mmc = [t, x, y, len/2, sina]; % [n,7] MMCs{ele} = mmc; % the polygon of each MMC cosa = sqrt(1 - sina.^2); stepx = t0/2 * abs(sina); stepy = t0/2 * cosa; stepy(dir>0) = -stepy(dir>0); n0 = [nodes1(:,1) - stepx, nodes1(:,2) - stepy]; % [n,2] n1 = [nodes1(:,1) + stepx, nodes1(:,2) + stepy]; n2 = [nodes2(:,1) + stepx, nodes2(:,2) + stepy]; n3 = [nodes2(:,1) - stepx, nodes2(:,2) - stepy]; poly0 = [n0'; n1'; n2'; n3']; poly1 = reshape(poly0, 2, 4, []); MMCs_poly{ele} = permute(poly1, [2,1,3]); % [4,2,n] % % test polyshape % for i = 1:size(n0,1) % n = [n0(i,:); n1(i,:); n2(i,:); n3(i,:)]; % p = polyshape(n); % plot(p); hold on; % end end end