Question

J'ai mis de points qui se trouve sur l'image. Cet ensemble de points de former une forme fermée irrégulière. Je dois trouver la zone de cette forme. Est-ce que tout organisme qui est l'algorithme normal utilisé pour le calcul de la zone? Ou est-il un support disponible dans les bibliothèques telles que coup de pouce? J'utilise C ++.

Était-ce utile?

La solution

Si vous polygone est simple (il n'a pas de point commun, sauf pour les paires de segments consécutifs), puis vient wikipedia pour vous aider:

La formule de la zone est

text alt

(il suppose que le dernier point est le même de la première)

Vous pouvez facilement mettre en œuvre comme

float area = 0.0f;

for (int i = 0; i < numVertices - 1; ++i)
  area += point[i].x * point[i+1].y - point[i+1].x * point[i].y;

area += point[numVertices-1].x * point[0].y - point[0].x * point[numVertices-1].y;

area = abs(area) / 2.0f;

sommets de cours doivent être commandés en fonction de leur naturelle dans ce polygone ..

Autres conseils

Vous voudrez peut-être plus précis, peut-être même fournir un exemple graphique.

Par exemple, si les points que vous avez ne sont que des pixels, le nombre de pixels est égal à la zone. Mais si les points sont les coins d'un polygone, puis la zone du polygone est pas facile à déterminer. Vous utiliseriez triangulation des polygones , et la somme des surfaces des triangles obtenus.

Remarque: Si vous ne connaissez pas l'ordre des points et ne peut pas garantir que votre polygone est convexe, il est impossible de déterminer l'ordre de la forme, car il peut y avoir plus d'un ordre possible les points qui produit un polygone. Si vous ne savez que le polygone est convexe, déterminer l'ordre des points est facile. trier simplement les points en angle d'un point particulier., avec le premier point étant celui qui forme une ligne entre elle-même et le point initial de telle sorte que se trouvent sur le même côté de la ligne de tous les autres points. Les triangles formés par ce procédé peuvent également être utilisées pour calculer l'aire.

Il y a un soutien pour le calcul de la superficie des polygones dans Boost.Geometry (qui n'a pas encore accepté dans boost et qui est très déroutant à utiliser). Sinon, vous devrez déterminer le polygone qui est défini par vos points d'abord. Des regards de celui-ci tous vos points sont sommets du polygone donc c'est simplement une question de commander vos points correctement ensembles. Une autre possibilité est que vous êtes à la recherche de la coque convexe de votre ensemble de points (voir http: //en.wikipedia .org / wiki / Convex_hull_algorithms ).

Sans modestie, je vous renvoie à ma réponse à une autre question surface combinée cercles qui se chevauchent . Monte Carlo est robuste, facile à paralléliser et, par la suite, vous donner une réponse à la précision dont vous avez besoin.

La façon la plus simple de le faire est probablement de trianguler votre forme et calculer la superficie des triangles. Dave Eberly a une bibliothèque appelée (licence Boost) qui peut aider à la triangulation; il y a plus d'informations . Recherchez TriangulateEC, par exemple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top