Obtener el vector de dirección del flujo de agua del vector normal de agua

8

Estoy atrapado desarrollando un detalle importante del agua de mi juego: ¡hacer que fluya hacia abajo!

Teniendo en cuenta un mundo 3D típico en el que el agua tiende a ir hacia la gravedad g=(0,-1,0), y teniendo la normalidad de la superficie del agua n=(x,y,z), ¿cómo puedo calcular, en base a eso, el vector de dirección del flujo de agua?

Como ejemplo, considere este gráfico mal hecho (aunque en 2D)

Gráfico de flujo de agua

Actualización: estoy considerando una superficie de agua muy simplificada (solo un avión: sin ondas, sin olas, sin presión, etc.). Si alguno de esos necesitara ser aplicado, la respuesta dependería de más factores que solo lo normal.

Ivelate
fuente

Respuestas:

13

Una forma de hacerlo, considerando que desea un ángulo de 90 °, es encontrar el producto cruzado de la normalidad y la gravedad, normalizarlo y luego cruzarlo con la normal nuevamente.

En su diagrama, la primera cruz producirá un vector que apunta hacia la pantalla, y la segunda cruz producirá el vector de flujo.

Un efecto secundario interesante del uso de productos cruzados es que el vector de flujo será más largo cuanto más lejos esté el vector normal de la vertical, ¿qué podría usarse para la velocidad de flujo?

Esto supone que está utilizando un sistema de coordenadas diestro, si su sistema es de la mano izquierda, el vector intermedio señalará en su lugar, pero seguirá produciendo el mismo resultado.

Piedra angular
fuente
Sí, eso se ve genial. Incluso cuando se ve tan simple cuando se explica, pasé como media hora pensando en diferentes formas (incorrectas) de hacerlo, y me perdí esta completamente. ¡Gracias!
Ivelate
Esto no producirá nada que se parezca remotamente a lo que normalmente pensaría como una dirección de flujo. Para ver por qué considerar cuáles serían las normales de superficie de un río que fluye a través de su mapa y cómo van a diferir en un río que fluye de este a oeste y de oeste a este (es decir, no lo son).
Jack Aidley
1
¿Qué pasa si lo normal y la gravedad son (anti) paralelos? No puedo evitar encontrar sentido en esta respuesta. Como dijo @JackAidley, hay infinitas direcciones de flujo posibles dadas una normal.
Margaret Bloom
1
Dado el modelo simplificado presentado en la pregunta, creo que esta respuesta producirá el vector que estaban buscando. @Margaret Si los vectores son (anti) paralelos, entonces el vector de flujo será (0,0,0), que sería el flujo esperado en un cuerpo plano de agua, es decir, un estanque / lago
KingPin
@ KingPin: Un río también es un cuerpo plano de agua, y la mayoría de los lagos fluyen hacia los ríos.
Jack Aidley
1

No puede determinar la dirección del flujo de agua desde sus normales en la superficie, necesitará almacenar datos adicionales.

Un simple viaje para mirar un río debería ser suficiente para convencerte de esto. Cualquier diferencia en las normales de la superficie simplemente refleja ondulaciones en la superficie, la masa de agua continúa fluyendo en la misma dirección. Pero la razón subyacente es porque lo normal define un plano y necesita un vector de flujo. Sus vectores tienen que ver con la forma de la superficie, no con el movimiento del agua.

Jack Aidley
fuente
1
Es cierto que tienes razón. Estaba considerando solo un cuerpo de agua muy simplificado (sin ondas, sin olas, sin presión, etc.), pero ciertamente en la vida real este cálculo no sería tan simple. Voy a actualizar la pregunta para aclarar esos detalles. ¡Gracias por tu contribución!
Ivelate