2016-08-11 3 views
1

Ich habe eine spezielle Art von Dreiecksnetz. (d. h. ich habe keinen regulären Algorithmus verwendet, um die Menge der Punkte, die ich habe, zu triangulieren, aber ich habe einen speziellen Algorithmus verwendet, um dies für chemische Daten zu tun). Das Ergebnis ist eine komplizierte 3D-Form, die aus vielen Dreiecken und Tetrahedronen besteht.Zählen von Löchern in einem Netz

Bevor ich mit meiner Aufgabe fortfahren kann, muss ich die Anzahl der Löcher in den Oberflächen (Löcher zwischen den Dreiecken) und die "Lücken" (Leere Volumen) zwischen den Tetraedern zählen.

Beispiel von Löchern in einer einfachen Form aus meinen Daten:

enter image description here

enter image description here

Gibt es einen bekannten Algorithmus dieses oder eine Python-Bibliothek zu erreichen, die diese dabei hilft?

Vielen Dank.

Antwort

1

Es scheint, dass die Mengen, die Sie zu berechnen versuchen, die ersten und zweiten Betti numbers eines Simplizialkomplexes sind. Wenn Sie eine Google-Suche durchführen, finden Sie einige Literatur zu verschiedenen Möglichkeiten, solche Dinge zu berechnen. Viele von ihnen scheinen auf einer Matrix zu basieren (siehe z.B. https://jeremykun.com/2013/04/10/computing-homology/). Es gibt auch einen direkten Weg, um es für Ihr Problem basierend auf kollabierenden Kanten zu tun. Ich werde sehen, ob ich eine schnelle Implementierung davon schreiben kann (ich bin mir nicht sicher, ob es einfacher als die Matrizen ist).