Tengo un conjunto de puntos que se encuentra en la imagen. Estos conjuntos de puntos forman una forma cerrada irregular. Necesito encontrar el área de esta forma. ¿Algún cuerpo que sea el algoritmo normal usado para calcular el área? ¿O hay alguna ayuda disponible en bibliotecas como boost? Estoy usando C++.Área de forma irregular
Respuesta
Si polígono es simple (que no tiene ningún punto en común con excepción de los pares de segmentos consecutivos), entonces Wikipedia trata de ayudarle a:
La fórmula para el área es
(se supone que el último punto es el mismo de la primera)
que se pueden 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;
de vértices curso deben ser ordenados de acuerdo con su continuación natural en el polígono ..
Ha olvidado el último segmento. – Beta
usted era, correcto: porque la fórmula asume ese punto [n] == punto [0]. Agregó el último paso al algoritmo. – Jack
En la penúltima línea, el punto [0] no especifica si está utilizando X o Y. Supongo que X, dado el código en el forloop. Además, adjuntaré el forloop entre paréntesis para que sea más fácil de leer. –
Hay un summation formula para eso.
esta respuesta realmente podría ser mejorada ... – ThiefMaster
Es posible que desee para ser más precisos, posiblemente, incluso proporcionando un ejemplo gráfico.
Por ejemplo, si los puntos que tiene son simplemente píxeles, entonces el número de píxeles es igual al área. Pero si los puntos son las esquinas de un polígono, entonces el área del polígono no es tan fácil de determinar. Utilizaría triangulación de polígono y sumar las áreas de los triángulos obtenidos.
Nota: Si no conoce el orden de los puntos y no puede garantizar que su polígono sea 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, es fácil determinar el orden de los puntos. Simplemente clasifique los puntos por el ángulo de un punto particular. El primer punto es el que forma una línea entre sí mismo y el punto inicial, de modo que todos los otros 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 se acepta en boost y que es muy confuso de usar). De lo contrario, primero tendría que determinar el polígono definido por sus puntos. Por lo que se ve, todos tus puntos son vértices del polígono, así que esto es simplemente una cuestión de ordenar tus conjuntos de puntos correctamente. Otra posibilidad es que esté buscando el casco convexo de su conjunto de puntos (consulte http://en.wikipedia.org/wiki/Convex_hull_algorithms).
Sin modestia, lo remito a mi respuesta a otra pregunta Combined area of overlapping circles. Monte Carlo es robusto, fácil de paralelar y, eventualmente, le dará una respuesta a la precisión que necesita.
La manera más simple de hacer esto es probablemente triangular su forma y calcular el área de los triángulos. Dave Eberly tiene una biblioteca llamada (licencia Boost) que puede ayudar con la triangulación; hay más información here. Busque TriangulateEC, por ejemplo.
- 1. Forma de Windows de forma irregular (C#)
- 2. Cálculo de área de polígono irregular en C#
- 3. Buscando una manera de simular DIV de forma irregular
- 4. Representando un mundo de juego que tiene una forma irregular
- 5. ¿Cómo recorto una imagen basada en una forma irregular?
- 6. ¿Cuál es la forma más rápida de encontrar el centro "visual" de un polígono de forma irregular?
- 7. OpenCV Centroide of Irregular Shape
- 8. Interpolación sobre una cuadrícula irregular
- 9. ¿Existen otras opciones para habilitar un área en la que se puede hacer clic de forma irregular en una página web distinta a los mapas de imágenes?
- 10. creada dinámicamente matriz rectangular irregular
- 11. iphone UIbezierpath imagen irregular recorte
- 12. Creación de ImageButton de forma irregular con diferentes estados de clic
- 13. estructura de datos y el algoritmo para detectar colisiones de mover objetos de forma irregular
- 14. de suavizado datos de tiempo irregular muestreados
- 15. En HTML5, ¿puedo crear un cuadro de texto de forma irregular?
- 16. Evento de clic del botón Irregular PNG en WPF
- 17. Bucle a través de la enumeración irregular en Delphi
- 18. C# declaración de tipo de matriz irregular en reversa
- 19. Borde CSS irregular con diferentes bordes de tamaño/color
- 20. Interpolación 2D de rejilla irregular grande a cuadrícula regular
- 21. Área de pantalla vs rectángulo del área de trabajo
- 22. ¿Cómo hacer mapas de área de imagen posicionados de forma absoluta haciendo clic con el mouse?
- 23. Restablece el valor del área de texto después de la sumisión de la forma
- 24. ¿Cómo evito que Bing inunde mi sitio con tráfico irregular?
- 25. Convierta una serie temporal irregular en una serie temporal normal
- 26. ¿Hay algún algoritmo para calcular el área de una forma dadas las coordenadas que definen la forma?
- 27. ¿Cuál es la forma más segura de configurar un área de administración en PHP?
- 28. Añadir tinymce a la nueva área de texto de forma dinámica
- 29. Filtros de área global en MVC 3
- 30. ¿Cómo puedo incrustar un área de texto dentro de otra área de texto en HTML?
La próxima vez pruebe Math Overflow (http://mathoverflow.net/) y luego vuelva aquí con una pregunta sobre la implementación del mejor algoritmo que le brindan. Probablemente obtendrás mejores resultados. – Ricket
@Ricket: Math Overflow es para preguntas de investigación de nivel superior y superior. Esta pregunta es muy fácil y sería rechazada. – Brian
puede probar este enlace: http://www.wikihow.com/Calculate-the-Area-of-a-Polygon Espero que ayude –