5 votos

Calculando el volumen de un poliedro cóncavo

Tengo una cuadrícula circular con puntos distribuidos uniformemente en toda ella. Mira esto: Introducir descripción de la imagen aquí

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: Introducir descripción de la imagen aquí

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.

  1. 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.

  1. 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í.

  2. 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.

  3. 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?

  4. 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.

4voto

JeanMarie Puntos 196

Aprobar @Heimdall.

Vamos a explicar por qué una fórmula tan simple es valiosa.

Puede que sepas que una de las mejores aproximaciones locales de una superficie construida en una cuadrícula como la tuya es a través de la interpolación bilineal: consideremos el caso simple de puntos con coordenadas $(0,0,h_{00}),(1,0,h_{10}),(1,1,h_{11}),(0,1,h_{01})$. Entonces la superficie cuádrica que pasa por estos 4 puntos (en general un PH, abreviatura de Paraboloide Hiperbólico, ver figura a continuación) tiene la siguiente ecuación:

$$z=f(x,y)=(1-x)(1-y)h_{00}+x(1-y)h_{10}+(1-x)yh_{01}+xyh_{11}$$

(comprueba por ejemplo que, cuando $x=1$ y $y=0$, el único término "superviviente" no nulo es la altura $h_{10}$ precisamente asociada al punto $(1,0,h_{10})$).

Ahora, el volumen bajo esta superficie se calcula fácilmente como $$\int_{x=0}^1\int_{y=0}^1 \ f(x,y)dxdy=\dfrac{h_{00}+h_{10}+h_{01}+h_{11}}{4}$$

Ahora, adaptar la fórmula anterior a los pasos de la cuadrícula es fácil y equivale, como se ha dicho, a la multiplicación de la fórmula anterior por el área del cuadrado elemental de la cuadrícula. En términos dimensionales: metros por metros cuadrados hacen metros cúbicos, la unidad correcta para un volumen; todo es para lo mejor...

introducir descripción de la imagen aquí

0 votos

¡Gracias por tu ayuda y excelente respuesta! Ya marqué esta pregunta como respondida.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X