| Autor |
Beitrag |
   
Max
| | Veröffentlicht am Samstag, den 17. November, 2001 - 9:46: | |
Hallo! Ich habe ein Problem: Ich soll das Volumen eines nicht gleichmäßigen Körpers berechnen, der durch Punkte (Sowie aus Dreiecken dieser Punkte) gegeben ist. Ich habe den Körper bereits trianguliert - das heißt die Oberfläche in Dreiecke zerlegt - somit kann ich schon mal die Oberfläche berechnen. Die Frage ist jetzt nur, wie kann ich das Volumen berechnen? Algorithmus? DANKE Max |
   
Ronny (Wonky)
| | Veröffentlicht am Samstag, den 17. November, 2001 - 23:03: | |
Hi auch nun ich muste mal bei jemanden abschreiben .. 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 (Quelle www.mathematica.ch) ich hoffe das hilft weiter sonst must du wohl spezieller werden ... Gruss Ronny |
   
Max
| | Veröffentlicht am Sonntag, den 18. November, 2001 - 9:21: | |
Danke erstmal Ronny! Jedoch habe ich noch ein paar Fragen: Ich soll ein paar ewtwas komplexere Objekte berechnen - wie z.B. einen Torus. Ich habe nun bereits die Oberfläche (gebildet durch die Punkte) mit Hilfen von Dreiecken trianguliert. Heißt das jetzt, dass ich den Ursprung (0/0/0) als Bezugspunkt nehmen soll und diesen dann mit den 3 Punkten des Dreiecks vektoriell verbinde? Nehmen wir mal an, das Dreieck besitze die 3 Punkte: A(x1/y1/z1), B(x2/y2/z2) und C(x3/y3/z3) wenn ich jetzt (0/0/0) als Bezugspunkt nehme, was genau müsste ich da rechnen? Die Frage ist nur, ob sich die Polyeder ja nicht überschneiden? Somit würde ich ja mehrere Volumina doppelt berechnen... MFG Max |
   
Ronny (Wonky)
| | Veröffentlicht am Sonntag, den 18. November, 2001 - 11:55: | |
Hi Max äh äh keine Ahnung tut mir leid ich weiß nicht weiter, ist nicht unbedingt mein gebiet versuche es mal bei http://www.zahlreich.de oder jemand anderes kann hier helfen |
|