⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compute_voronoi_triangulation.m.svn-base

📁 fast marching method
💻 SVN-BASE
字号:
function faces = compute_voronoi_triangulation(Q, vertex)% compute_voronoi_triangulation - compute a triangulation%%   face = compute_voronoi_triangulation(Q);%%   Q is a Voronoi partition function, computed using%       perform_fast_marching.%   face(:,i) is the ith face.%%   Works in 2D and in 3D.%%   Copyright (c) 2008 Gabriel Peyred = nb_dims(Q);if d==2    faces = compute_voronoi_triangulation_2d(Q, vertex);elseif d==3    faces = compute_voronoi_triangulation_3d(Q, vertex);else    error('Works only for 2D or 3D data.');endreturn;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function faces = compute_voronoi_triangulation_3d(Q, vertex)[dx dy dz] = meshgrid(0:1,0:1,0:1);V = [];for i=1:8    v = Q(1+dx(i):end-1+dx(i),1+dy(i):end-1+dy(i),1+dz(i):end-1+dz(i));     V = [V v(:)];endV = sort(V,2);V = unique(V, 'rows');V = V( prod(V,2)>0 ,:);d = V(:,1)*0;for i=1:7   d = d+(V(:,i)~=V(:,i+1));endif sum(d==4)>1%    warning('Problem with triangulation.');end% split 5 folds into 2I = find(d==4);faces = [];for i=1:length(I)    v = unique(V(I(i),:));    x = vertex(:,v); % points    % barycenter    a = sum( x, 2 ) / 5;    x = x-repmat(a, [1 size(x,2)]);    t = atan2(x(2,:),x(1,:));    [tmp,s] = sort(t);    faces = [faces v( s([1 2 3 5]))'];    faces = [faces v( s([3 4 1 5]))'];    end%    faces = [V(I,1:3);V(I,[3 4 1])];% remaining trianglesV = V( d==3 ,:);for i=1:size(V,1)    V(i,1:4) = unique(V(i,:));endfaces = [faces, V(:,1:4)'];%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function faces = compute_voronoi_triangulation_2d(Q, vertex)V = [];v = Q(1:end-1,1:end-1); V = [V v(:)];v = Q(2:end,1:end-1); V = [V v(:)];v = Q(1:end-1,2:end); V = [V v(:)];v = Q(2:end,2:end); V = [V v(:)];V = sort(V,2);V = unique(V, 'rows');V = V( prod(V,2)>0 ,:);d = (V(:,1)~=V(:,2)) + (V(:,2)~=V(:,3)) + (V(:,3)~=V(:,4));if sum(d==3)>1    warning('Problem with triangulation.');end% split squares into 2 trianglesI = find(d==3);faces = [];for i=1:length(I)    v = V(I(i),:);    x = vertex(:,v); % points    % barycenter    a = sum( x, 2 ) / 4;    x = x-repmat(a, [1 size(x,2)]);    t = atan2(x(2,:),x(1,:));    [tmp,s] = sort(t);    faces = [faces; v( s([1 2 3]))];    faces = [faces; v( s([3 4 1]))];    end%    faces = [V(I,1:3);V(I,[3 4 1])];% remaining trianglesV = V( d==2 ,:);for i=1:size(V,1)    V(i,1:3) = unique(V(i,:));endfaces = [faces; V(:,1:3)];% return in correct formatfaces = faces';

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -