-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathheader_cluster_demo.m
61 lines (57 loc) · 1.9 KB
/
header_cluster_demo.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
[~,extra_h] = unix('ls -1 /usr/local/igl/libigl/include/igl/*/*.h');
[~,extra_cpp] = unix('ls -1 /usr/local/igl/libigl/include/igl/*/*.cpp');
[~,examples] = unix('ls -1 /usr/local/igl/libigl/examples/*/*.cpp');
[~,dropbox] = unix('ls -1 ~/Dropbox/*/*.cpp');
files = textscan([ ...
ls('~/Documents/Puppet/Code/C++/*.cpp') ...
ls('~/Documents/Puppet/Code/C++/*.h') ...
ls('~/Documents/EdgeBasedLaplacian/Code/C++/src/*.cpp') ...
ls('~/Documents/EdgeBasedLaplacian/Code/C++/src/*.h') ...
ls('~/Documents/volume/winding_number/*.cpp') ...
ls('~/Documents/volume/winding_number/*.h') ...
ls('~/Documents/volume/selfintersect/src/*.cpp') ...
ls('~/Documents/volume/selfintersect/src/*.h') ...
ls('~/Documents/volume/post_graph_cut/*.cpp') ...
ls('~/Documents/volume/post_graph_cut/*.h') ...
ls('~/Documents/AutoDOF/Code/skinning/skinning/*.cpp') ...
ls('~/Documents/AutoDOF/Code/skinning/skinning/*.h') ...
ls('/usr/local/igl/libigl/include/igl/*.h') ...
ls('/usr/local/igl/libigl/include/igl/*.cpp') ...
extra_h ...
extra_cpp ...
examples ...
dropbox ...
],'%s', 'delimiter', '\n' );
files = files{1};
[~,H,f2H] = header_adjacency(files);
% Must be included at least twice
H = H(sum(f2H,1) > 1);
f2H = f2H(:,sum(f2H,1) > 1);
A = f2H' * f2H;
% diagonal is not interesting
A = A - diag(diag(A));
% Must have at least median mutual includes to be an edge
A(A(:)<1) = 0;
% Must have at least median other mutual includes
H = H(sum(A,2)>median(sum(A,2)));
A = A( sum(A,2)>median(sum(A,2)), sum(A,2)>median(sum(A,2)));
P = rand(numel(H),2);
[EI,EJ] = find(tril(A+A'));
E = [EJ EI];
L = (A-diag(sum(A,2)));
I = 0*speye(size(L));
[EV,ED] = eigs(L+I,size(A,1),'sm');
EV = EV(:,2:end);
ED = ED(2:end, 2:end);
p = 1;
B = EV * (inv(abs(ED))^(p/2));
%nsp = 2;
%subplot(1,nsp,1);
%plot_edges(P,E);
%subplot(1,nsp,2);
plot_edges(B(:,1:3),E);
C = kmeans(B,20);
for c = 1:max(C)
fprintf('%s\n',H{C==c});
fprintf('\n');
end