implements statistics computation on face areas
This commit is contained in:
parent
47a9897747
commit
1772005c1b
1
README
1
README
@ -2,3 +2,4 @@ Pour compiler la première fois : `mkdir build && make'
|
|||||||
Pour recompiler les fois suivantes : `make'
|
Pour recompiler les fois suivantes : `make'
|
||||||
Pour nettoyer les fichiers de compilation : `make clean'
|
Pour nettoyer les fichiers de compilation : `make clean'
|
||||||
Pour exécuter le programme : `LD_LIBRARY_PATH=libs/OpenMesh/liblinux/ ./build/tp1 <obj>'
|
Pour exécuter le programme : `LD_LIBRARY_PATH=libs/OpenMesh/liblinux/ ./build/tp1 <obj>'
|
||||||
|
Pour faire un bel histogramme coloré : LD_LIBRARY_PATH=libs/OpenMesh/liblinux/ build/tp1 <obj> | util/plot.py [nombre de classes, 10 par défaut]
|
||||||
|
24
src/main.cpp
24
src/main.cpp
@ -77,6 +77,18 @@ float total_area(MyMesh &mesh) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void stats_surface_area(MyMesh &mesh) {
|
||||||
|
if (!check_faces_are_triangles(mesh)) {
|
||||||
|
std::cerr << "Le calcul de l’aire ne peu se faire que sur un maillage triangulaire." << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (const MyMesh::FaceHandle &face : mesh.faces()) {
|
||||||
|
std::cout << face_area(mesh, face) << " ";
|
||||||
|
}
|
||||||
|
std::cout << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@ -86,18 +98,20 @@ int main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
MyMesh mesh;
|
MyMesh mesh;
|
||||||
OpenMesh::IO::read_mesh(mesh, argv[1]);
|
OpenMesh::IO::read_mesh(mesh, argv[1]);
|
||||||
cout << "Les faces sont des triangles : "
|
cerr << "Les faces sont des triangles : "
|
||||||
<< (check_faces_are_triangles(mesh) ? "oui" : "non")
|
<< (check_faces_are_triangles(mesh) ? "oui" : "non")
|
||||||
<< endl;
|
<< endl;
|
||||||
cout << "Les faces ont des voisines : "
|
cerr << "Les faces ont des voisines : "
|
||||||
<< (check_faces_arent_lonely(mesh) ? "oui" : "non")
|
<< (check_faces_arent_lonely(mesh) ? "oui" : "non")
|
||||||
<< endl;
|
<< endl;
|
||||||
cout << "Les sommets sont sur une arête : "
|
cerr << "Les sommets sont sur une arête : "
|
||||||
<< (check_vertices_arent_lonely(mesh) ? "oui" : "non")
|
<< (check_vertices_arent_lonely(mesh) ? "oui" : "non")
|
||||||
<< endl;
|
<< endl;
|
||||||
cout << "Les arêtes sont sur une face : "
|
cerr << "Les arêtes sont sur une face : "
|
||||||
<< (check_edges_arent_lonely(argv[1]) ? "oui" : "non")
|
<< (check_edges_arent_lonely(argv[1]) ? "oui" : "non")
|
||||||
<< endl;
|
<< endl;
|
||||||
cout << "Aire totale : " << total_area(mesh) << endl;
|
cerr << "Aire totale : " << total_area(mesh) << endl;
|
||||||
|
// stats_to_csv(stats_surface_area(mesh));
|
||||||
|
stats_surface_area(mesh);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
12
util/plot.py
Executable file
12
util/plot.py
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/python3
|
||||||
|
import sys
|
||||||
|
from matplotlib import pyplot as plt
|
||||||
|
|
||||||
|
data = list(map(float, sys.stdin.readline().split()))
|
||||||
|
vals, bins, _ = plt.hist(data, bins=10 if len(sys.argv) == 1 else int(sys.argv[1]), color='deeppink')
|
||||||
|
for i, v in zip([a + (b-a) / 2 for a, b in zip(bins, bins[1:])], vals):
|
||||||
|
plt.text(i, v, str(int(v)), color='darkviolet', ha='center', fontweight='bold')
|
||||||
|
plt.xticks(ticks=bins,
|
||||||
|
labels=list(map(lambda e: f'{e:.5}', bins)),
|
||||||
|
rotation=30, ha='right')
|
||||||
|
plt.show()
|
Reference in New Issue
Block a user