Tengo una cuadrícula circular con puntos distribuidos uniformemente en toda ella. Mira esto:
A cada punto se le asigna una altura no negativa (es decir, la altura puede ser de 0 en adelante).
Estoy tratando de calcular con precisión el volumen de este... ¿poliedro(?)
Hasta ahora, mi trabajo ha consistido en buscar agrupaciones de 4 puntos (es decir, pequeños cuadrados dentro de la cuadrícula formados por 4 puntos) e intentar calcular el volumen del poliedro formado por esos 4 puntos y los 4 puntos con los valores de altura. Piensa en esto:
El problema con este método es que los poliedros no son necesariamente convexos, lo cual significa que no puedo usar fácilmente un algoritmo para dividir cada poliedro en tetraedros y sumar sus volúmenes.
¿Alguna idea?
¿Sería mejor aplicar algún tipo de algoritmo a toda la cuadrícula circular que pudiera dividirla en poliedros disjuntos y convexos; luego usar otro algoritmo para calcular el volumen de cada uno mediante la división en tetraedros?
Pido disculpas por lo que puede ser una pregunta de novato, y por no tener mucho para mostrar sobre lo que he intentado. La geometría nunca ha sido mi punto fuerte, y realmente no estoy seguro de la mejor manera de abordar este problema.
edit/actualización Gracias por todas las respuestas / sugerencias rápidas. Esta comunidad siempre me sorprende. Perdón por mi retraso en responder. Hoy salí de la ciudad para celebrar el cumpleaños de mi sobrina. Haré todo lo posible para abordar algunas de las preguntas que quedaron en los comentarios y ayudar a aclarar los detalles específicos de mi problema. De antemano disculpas por mi ignorancia sobre la geometría que se está utilizando aquí. Soy un estadístico de formación, y nunca me fue muy bien con la geometría.
- El círculo es una región de ~38.4 km cuadrados centrada alrededor de una estación meteorológica GHCN. Los puntos dentro del círculo están distribuidos uniformemente, y representan lugares donde los valores de precipitación se interpolaron utilizando kriging ordinario, la altura asociada con cada punto (mostrada en la segunda imagen) es el valor de precipitación en incrementos de 10 mm. El objetivo es medir el volumen de precipitación sobre esa región circular.
Mi método inicial, y lo que asumí que iba a ser propenso a errores, consistía en dividir el área total de la región circular entre el número de puntos en la cuadrícula, tomar ese valor como el área para la región centrada alrededor de cada punto. La altura en este punto se multiplicaba por el área, y se sumaban todos los volúmenes resultantes. (Henning, creo que esto es similar a lo que propusiste en los comentarios.) Sin embargo, pensé que había un método mejor por ahí que podría implementar en R o Matlab.
-
El objeto en la segunda imagen... se me ocurrió mirar los cuadrados de 4 puntos en la cuadrícula, las alturas en cada punto, y usando estas coordenadas para definir los vértices de un poliedro. Si pudiera calcular el volumen de cada uno de estos, entonces podría escribir una función para recorrer esa cuadrícula y calcular el volumen total de precipitación de manera más precisa (creo) que el primer método. La segunda imagen fue solo un gráfico 3D rápido que hice en R para ayudar a visualizar cómo podría ser un poliedro de este tipo. Fue entonces cuando publiqué aquí.
-
Studiosus- tu solución parece bastante prometedora porque creo que podría definir fácilmente los bordes, caras y vértices. En cuanto a reorientarlos y hacer la integración... ¿tienes algún recurso al que podrías señalarme donde pueda leer sobre cómo funciona todo eso? No estoy seguro de poder sumergirme y codificar una función para hacer todo eso aún.
-
Heimdall y JeanMarie- esta solución parece perfecta, y bastante fácil de implementar computacionalmente. Para asegurarme de no pasar por alto nada, sumaría las 4 alturas para cada cuadrado 2x2, dividiría por 4 y multiplicaría por el área del cuadrado (ya que la fórmula dada usa un cuadrado unitario). Hacer esto para cada cuadrado y sumar. ¿Correcto? Si es así, parece ser mi mejor opción.
Pregunta de seguimiento: surgen algunos casos límite donde tengo 3 puntos formando una base triangular. El volumen para estos se calcularía al cortar el objeto como un prisma triangular, con una altura igual a la menor de las 3 alturas, y el objeto restante sería un tetraedro. Puedo calcular ambos volúmenes fácilmente y agregarlos juntos. ¿Parece una buena manera de manejar esos casos? -
Finalmente, ¿estoy ganando mucha precisión al utilizar el método dado por JeanMarie y Heimdall sobre mi método inicial? ¿Habría alguna razón para seguir la solución propuesta por Studiosus en lugar de JeanMarie y Heimdall dada la contexto de mi problema?
¡Muchas gracias a todos por los consejos y la ayuda hasta ahora!
0 votos
¿Sabes cómo calcular el contorno de este poliedro (es decir, la colección de caras)? Si es así, hay un algoritmo fácil para el cálculo del volumen utilizando "volúmenes firmados" de ciertos politopos convexos. Esto no requiere triangulación. Consulta mi respuesta aquí: math.stackexchange.com/questions/803076/…
1 votos
@studiosus: No creo que en realidad tenga un poliedro, simplemente tiene una conexión de puntos (cuyas coordenadas x/y se proyectan en una cuadrícula), pero en realidad no lo ha dividido en caras.
2 votos
Patrick, como cuestión inicial, ¿estás seguro de que simplemente considerar tu volumen como una colección de pilares cuadrados centrados en cada punto de muestra no te dará resultados aceptables en la práctica (para cualquier propósito desconocido que necesites esto)? Eso sería fácil de calcular: solo suma todos los pesos y multiplícalos por el cuadrado del tamaño de la cuadrícula. Si eso no funciona para ti, entonces describir un caso concreto donde dé resultados insatisfactorios (junto con una explicación de qué lo hace insatisfactorio) facilitaría mucho la tarea de descubrir cómo mejorar la aproximación.
0 votos
Esto podría no ser un poliedro en absoluto. Imagina con el pequeño cuadrado las alturas de dos puntos opuestos siendo 1 y las alturas de los otros dos puntos opuestos siendo 2. Sin embargo, si defines un cuadrilátero con 4 vértices no coplanares de la manera correcta, el volumen de lo que está sobre ese cuadrado es simplemente el área del cuadrado multiplicado por la suma de todas las alturas dividido por 4.