Pregunta

He conjunto de puntos que se encuentra en la imagen. Este conjunto de puntos forman una forma cerrada irregular. Necesito encontrar el área de esta figura. ¿Tiene algún cuerpo que es el algoritmo normal utilizado para calcular el área? O ¿hay alguna ayuda disponible en librerías como impulso? Estoy usando C ++.

¿Fue útil?

Solución

Si polígono es simple (que no tiene ningún punto en común con excepción de los pares de segmentos consecutivos) y luego viene Wikipedia para ayudarle a:

La fórmula para el área es

text alt

(se supone que el último punto es el mismo de la primera)

Se puede implementar fácilmente como

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;

Por vértices del curso se debe pedir de acuerdo a su siguiente natural en el polígono ..

Otros consejos

Hay una suma fórmula para eso.

Es posible que desee para ser más precisos, posiblemente, incluso proporcionando un ejemplo gráfico.

Por ejemplo, si los puntos que tiene no son más píxeles, a continuación, el número de píxeles es igual al área. Pero si los puntos son los vértices de un polígono, entonces el área del polígono no es tan fácil de determinar. Tendrá que utilizar polígono triangulación , y la suma de las áreas de los triángulos obtenidos.

Nota: Si usted no sabe el orden de los puntos y no puede garantizar que el polígono es convexo, no es posible determinar el orden de la forma, ya que puede haber más de un orden posible los puntos que produce un polígono. Si sabe que el polígono es convexo, la determinación del orden de los puntos es fácil. Simplemente ordenar los puntos por ángulo de un punto en particular., Con el primer punto de ser el que forma una línea entre sí mismo y el punto inicial de tal manera que todos los demás puntos están en el mismo lado de la línea. Los triángulos formados por este proceso también se pueden usar para calcular el área.

Hay soporte para el cálculo del área de polígonos en Boost.Geometry (que aún no está aceptado en alza y que está muy confuso para el uso). De lo contrario, tendría que determinar el polígono que está definida por sus puntos primero. Desde el aspecto de que todos los puntos son vértices del polígono así que esto es una simple cuestión de un pedido de los conjuntos de puntos correctamente. Otra posibilidad es que usted está buscando la envolvente convexa de su conjunto de puntos (ver http: //en.wikipedia .org / wiki / Convex_hull_algorithms ).

Sin pudor, le remito a mi respuesta a otra pregunta área combinada de círculos superpuestos . Monte Carlo es robusto, fácil de paralelizar y, con el tiempo, le dará una respuesta a la precisión que requiere.

La forma más sencilla de hacer esto es probablemente para triangular su forma y calcular el área de los triángulos. David Eberly tiene una biblioteca llamada (licencia Boost) que puede ayudar con la triangulación; hay más información aquí . Busque TriangulateEC, por ejemplo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top