2009-08-24 9 views
1

Ich plane mit der Geometrie-Objekt in eine Reihe von einfacheren Formen aufzuteilen, und kombinieren ihre Zentroide dieser Formel:

Mathematische Details dieser Formel kann in this Wikipedia article finden.Wie soll ich einen Algorithmus für den Schwerpunkt eines beliebigen System.Windows.Media.Geometry-Objekts erstellen?

HINWEIS: Seien Sie nicht überrascht, wenn meine Sicht der Mathematik inkorrekt ist. Ich habe keine komplizierte Mathematik hinter der Trigonometrie gemacht, und ich musste mich nie mit griechischen Buchstaben beschäftigen. Ich denke, ich verstehe das ziemlich gut, aber lass es mich wissen, wenn ich falsch liege.

Eine Informationsnotiz: der Schwerpunkt einer geometrischen Form oder Prisma ist nicht nur die Mitte der Form. Es ist der Schwerpunkt oder das Zentrum der Masse. Ich gehe davon aus, dass Geometry-Objekte auch 3D-Prismen kapseln können, daher muss ich dies vielleicht in Zukunft berücksichtigen, aber im Moment konzentriere ich mich nur auf 2D-Geometrien. Für eine 2D-Form muss man sich vorstellen, dass es ein steifes Stück Papier mit einer gegebenen Form ist, und der Schwerpunkt wäre der Punkt, an dem dieses Stück Papier auf einer Nadel balancieren würde.

Das erste Problem, mit dem ich konfrontiert bin, ist, dass ich einen Weg finden muss, um ein bestimmtes Geometry-Objekt in einfach genug Formen zu teilen, damit diese Formel richtig funktionieren kann. Hat jemand irgendwelche Ideen, wie dies erreicht werden könnte? Oder gibt es ein besseres Verfahren, das immer noch universell funktioniert?

Das zweite Problem, mit dem ich konfrontiert bin, ist, dass nach der Aufteilung der Geometrie, wie gehe ich über den Schwerpunkt jedes Stückes zu finden? Jede Art von einfacher Form (Dreieck, Viereck, Halbkreis usw.) hat ihre eigene Schwerpunktformel. Gibt es eine Möglichkeit für mich, welche Art von Form jedes Stück ist?

+0

Es gibt keine universelle Formel, nur formspezifisch. –

+0

Danke, Lanze. Ich werde diesen Teil bearbeiten. – Giffyguy

+1

Ihr Blick auf die Mathematik ist richtig. – duffymo

Antwort

3

Die Tesselierung oder Diskretisierung beliebiger zweidimensionaler planarer Formen ist ein häufiges Problem in der Finite-Elemente-Analyse. Es wird üblicherweise mit planaren Dreiecken oder Vierecken gemacht. Versuchen Sie eine Google-Suche auf "2d finite element mesh generation" oder Quadtree oder Octree Mesh Generation. Sie können den Schwerpunkt jeder einfachen Form berechnen und die von Ihnen angegebene (richtige) Formel anwenden.

So etwas wie this. Oder these. Sie müßten natürlich die Rohgeometrie für den betreffenden Körper liefern.

Sie haben noch eine lange Reihe zu hacken. Sie müssen alle folgenden Schritte ausführen:

  1. Suchen Sie ein automatisches Vernetzungsprogramm und lernen Sie, wie Sie die Geometrie für Ihre 2D-Form eingeben.
  2. Führen Sie den automatischen Vernetzer aus und erhalten Sie eine Gitterausgabe, die aus allen 2D-Punkten im Raum und den Konnektivitäten aller dreieckigen und vierseitigen Elemente besteht.
  3. Schreiben Sie ein Programm, um das Netz zu lesen und die Fläche und den Schwerpunkt jedes Elements zu berechnen.
  4. Schließen Sie diese Werte in die von Ihnen angegebene Formel ein, um den Schwerpunkt Ihrer ursprünglichen 2D-Form zu berechnen. Dies bedeutet Schleifen über alle Elemente und Akkumulieren der Bereiche und der Produkte der (x, y) -Koordinaten jedes Elementschwerpunkts und seines Bereichs.
  5. Sobald Sie eine Antwort haben, müssen Sie die Konvergenz überprüfen. Sie tun dies, indem Sie Ihr Mesh verfeinern, indem Sie die Elemente verkleinern und neu berechnen. Sie wissen, dass Sie konvergiert sind, wenn Sie das Mesh verfeinern und die Antworten um weniger als eine kleine Toleranz (5% oder was auch immer Sie tolerieren wollen) ändern.

Es ist immer noch eine Menge Arbeit.

UPDATE: This one sieht ziemlich gut aus, und es ist Open Source.

+0

Interessant ... Ich muss diese ausprobieren und sehen, was sie tun können. – Giffyguy

+0

Das sieht nach einer wahren Lösung aus, und es ist im Grunde die Straße, die ich nehmen möchte - aber was ich wirklich will, ist herauszufinden, wie man das Mesh selbst berechnet. Weißt du, wo ich diesen Algorithmus überall finde? – Giffyguy

+0

Google für "Finite-Elemente-automatische Mesh-Dreieck" und wählen Sie die detaillierteste, die Sie finden können. Das Codieren kann eine Weile dauern - es wird nicht trivial sein. Vielleicht möchten Sie einfach etwas verwenden, das existiert: http://www-users.informatik.rwth-aachen.de/~roberts/software.html – duffymo

0

Ich habe keinen Code dafür, aber ich habe gesehen, wo die Form tesselated war (in diesem Fall mit polygon triangulation), so dass Sie eine schöne Reihe von Dreiecken haben würden. Berechnen Sie dann den kombinierten Schwerpunkt basierend auf dem gewichteten Durchschnitt des Schwerpunkts der Dreiecke.

EDIT:

Es ist ein Blog von den Jungs auf einem Produkt arbeiten Insight3D von AGI genannt. In dieser entry sprechen sie über Triangulation. Es könnte Ihnen helfen, es zu tun, da sie einige Hinweise auf Algorithmen geben. Abhängig von Ihrer Verwendung können Sie möglicherweise one ihrer implementations wiederverwenden. Es ist frei für die Entwicklung und nicht-kommerzielle Nutzung.

+0

Ich habe das für ein paar Stunden erforscht, und es sieht aus wie Tesselation ist der Weg zu gehen. Aber ich brauche immer noch einen guten Algorithmus für die Durchführung der Tesselation. Ich konnte noch nichts explizites finden, Code ODER Mathematik. – Giffyguy