|
At 21:23 07.02.01 +0100, you wrote:Liebe Listenteilnehmer, Die Berechnung des Volumens ist sehr einfach, wenn alle Polygone Dreiecke sind, welche "richtig" orientiert sind, also etwa im Gegenuhrzeigersinn, wenn man von außen auf den Körper schaut. Dann ist das Volumen des Körpers gleich einem Sechstel der Summe der Determinanten, welche jeweils aus den Ortsvektoren der Eckpunkte eines gegebenen Dreiecks gebildet werden. Das entsprechende Mathematica-Programm sieht so aus: vol[ T_ ] := Abs[ Apply[ Plus, Map[ Det, T ] ] / 6 ] Dabei ist T die Liste der Dreiecke, wobei jedes Dreieck als Liste von drei Punkten gegeben ist. Hier ein triviales Beispiel: Pyramide mit dem Einheitsquadrat als Grundfläche und Höhe 4: (Die Grundfläche wurde in zwei Dreiecke zerlegt.) a = {0, 0, 0}; b = {1, 0, 0}; c = {1, 1, 0}; d = {0, 1, 0}; e = {0.5, 0.5, 4}; P = {{a, d, b}, {b, d, c}, {e, a, b}, {e, b, c}, {e, c, d}, {e, d, a}}; vol[P] 1.33333 Diese Methode funktioniert auch bei beliebig komplexen Polyedern, die z.B. Körper mit Löchern darstellen. Man kann folgenderweise überprüfen, ob alle Dreiecke richtig orientiert sind: Jede Kante muss in genau zwei Dreiecken auftreten, und zwar in entgegengesetzten Orientierungen. Das kann man z.B. so machen: seiten[{a_, b_, c_}] := {{a, b}, {b, c}, {c, a}} ortest[T_] := Module[{kanten, k1, k2 }, kanten = Flatten[Map[seiten, T], 1]; k1 = Union[Map[Sort, kanten]]; k2 = Map[Reverse, k1]; Sort[kanten] == Union[k1, k2] ] ortest[P] True Beste Grüße, Johann Linhart Institut für Mathematik der Universität Salzburg |