header_cluster_demo.m 1.9 KB

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