compute_dual_graph

Dual graph of a triangle mesh, regarded as graph. Each face in original mesh corresponds to a vertex in dual graph, vertex position be the centroid of the original face.

Contents

Syntax

[amf] = compute_dual_graph(face);
[amf,dual_vertex] = compute_dual_graph(face,vertex);

Description

face  : double array, nf x 3, connectivity of mesh
vertex: double array, nv x 3, vertex of mesh
amf: sparse matrix, nf x nf, connectivity of dual graph
dual_vertex: nf x 3, dual vertex in dual graph, if vertex is not
             supplied, will return []

Contribution

Author : Wen Cheng Feng
Created: 2014/03/14
Revised: 2014/03/18 by Wen, add doc
Revised: 2014/03/23 by Wen, revise doc
Copyright 2014 Computational Geometry Group
Department of Mathematics, CUHK
http://www.math.cuhk.edu.hk/~lmlui
function [amf,dual_vertex] = compute_dual_graph(face,vertex)
[edge,eif] = compute_edge(face);
nf = size(face,1);
% dual_vertex is the center of each triangle
if nargin == 2
    dual_vertex = (vertex(face(:,1),:)+vertex(face(:,2),:)+vertex(face(:,3),:))/3;
else
    dual_vertex = [];
end

ind = eif(:,1)>0 & eif(:,2)>0;
eif2 = eif(ind,:);
amf = sparse(eif2(:,1),eif2(:,2),ones(size(eif2,1),1),nf,nf);
amf = amf+amf';