2009-08-24 6 views
1

Je prévois avoir à séparer l'objet de la géométrie dans une série de formes plus simples, et de combiner leurs centroïdes en utilisant cette formule:

détails mathématiques de cette formule se trouvent dans this Wikipedia article.Comment créer un algorithme pour le centroïde d'un objet System.Windows.Media.Geometry?

AVIS: Ne soyez pas surpris si ma vision des mathématiques est incorrecte. Je n'ai pas fait de trigonométrie mathématique complexe et je n'ai jamais eu à traiter de lettres grecques. Je pense que je comprends très bien celui-ci, mais s'il-vous-plaît faites-moi savoir si je me trompe.

Une note d'information: le centroïde d'une forme gométrique ou d'un prisme n'est pas seulement le milieu de la forme. C'est le centre de gravité, ou centre de gravité. Je suppose que les objets Geometry peuvent également encapsuler des prismes 3D, donc je devrais en tenir compte dans le futur, mais pour l'instant je me concentre uniquement sur les géométries 2D. Pour une forme 2D, vous devez imaginer que c'est un morceau de papier rigide avec une forme donnée, et le centroïde serait le point où ce morceau de papier serait en équilibre sur une aiguille.

Le premier problème auquel je suis confronté est que je dois trouver un moyen de fractionner avec précision un objet géométrique donné en formes assez simples, afin que cette formule puisse fonctionner correctement. Est-ce que quelqu'un a des idées comment cela pourrait être accompli? Ou y a-t-il une meilleure procédure qui fonctionnera toujours universellement?

Le deuxième problème auquel je suis confronté est qu'après la division de la géométrie, comment puis-je trouver le centroïde de chaque pièce? Chaque type de forme simple (triangle, quadrilatère, demi-cercle, etc.) a sa propre formule centroïde. Y a-t-il un moyen pour moi de comprendre quel type de forme est chaque pièce?

+0

Il n'y a pas de formule universelle, seulement spécifique à la forme. –

+0

Merci, Lance. Je vais éditer cette partie. – Giffyguy

+1

Votre vue des maths est correcte. – duffymo

Répondre

3

La tesselation ou la discrétisation de formes planaires 2D arbitraires est un problème courant dans l'analyse par éléments finis. C'est généralement fait avec des triangles planaires ou des quadrilatères. Essayez une recherche Google sur "2d finite element mesh generation" ou génération de maillage quadtree ou octree. Vous pouvez calculer le centroïde de chaque forme simple et appliquer la formule (correcte) que vous avez citée.

Quelque chose comme this. Ou these. Vous devez fournir la géométrie brute pour le corps en question, bien sûr.

Vous avez encore beaucoup de chemin à faire. Vous devrez faire tout ce qui suit:

  1. Trouvez un programme de maillage automatique et apprenez comment saisir la géométrie pour votre forme 2D.
  2. Exécuter le mailleur automatique et obtenir un maillage qui comprendra tous les points 2D dans l'espace et les connectivités de tous les éléments triangulaires et quadrilatères.
  3. Écrivez un programme à lire dans le maillage et calculez l'aire et le centroïde de chaque élément.
  4. Branchez ces valeurs dans la formule que vous avez citée pour calculer le centroïde de votre forme 2D originale. Cela signifie boucler tous les éléments et accumuler les surfaces et les produits des coordonnées (x, y) de chaque élément central et de sa surface.
  5. Une fois que vous avez une réponse, vous devez vérifier la convergence. Pour ce faire, affinez votre maillage en réduisant les éléments et en les recalculant. Vous savez que vous avez convergé lorsque vous affinez le maillage et que les réponses changent de moins d'une petite tolérance (5% ou tout ce que vous êtes prêt à tolérer).

C'est encore une bonne quantité de travail.

MISE À JOUR: This one semble assez bon, et il est open source.

+0

Intéressant ... Je vais devoir les essayer et voir ce qu'ils peuvent faire. – Giffyguy

+0

Cela ressemble à une solution aweome, et c'est fondamentalement la route que je veux prendre - mais ce que je veux vraiment est de comprendre comment calculer le maillage moi-même. Savez-vous où je peux trouver cet algorithme n'importe où? – Giffyguy

+0

Google pour "triangle de maillage automatique élément fini" et choisissez le plus détaillé que vous pouvez trouver. Cela pourrait prendre du temps pour coder - ce ne sera pas trivial. Vous voudrez peut-être utiliser quelque chose qui existe: http://www-users.informatik.rwth-aachen.de/~roberts/software.html – duffymo

0

Je n'ai aucun code pour ceci, mais j'ai vu où la forme était tesselée (dans ce cas en utilisant polygon triangulation) donc vous auriez un bon ensemble de triangles. Calculez ensuite le centroïde combiné en fonction de la moyenne pondérée du centroïde des triangles.

EDIT:

Il y a un blog par les gars qui travaillent sur un produit appelé Insight3D par AGI. Dans ce entry, ils parlent de triangulation. Cela pourrait vous aider à le faire car ils donnent plus de pointeurs sur les algorithmes. En fonction de votre utilisation, vous pourrez peut-être réutiliser one de implementations. Il est gratuit pour le développement et l'utilisation non commerciale.

+0

J'ai fait des recherches pendant quelques heures, et il semble que la tesselation est la voie à suivre. Mais j'ai encore besoin d'un bon algorithme pour effectuer la tesselation. Je n'ai pas encore été capable de trouver quelque chose d'explicite, du code OU des maths. – Giffyguy

Questions connexes