You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.8 KiB
61 lines
1.8 KiB
3 years ago
|
%--------------------------
|
||
|
% @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
|