Obter vetor de direção do fluxo de água do vetor normal da água

8

Estou empolgado em desenvolver um detalhe importante da água do meu jogo: fazer fluir para baixo!

Considerando um mundo 3D típico em que a água tende a ir em direção à gravidade g=(0,-1,0) e tendo o normal da superfície da água n=(x,y,z), como posso calcular, com base nisso, o vetor de direção do fluxo de água?

Como exemplo, considere este gráfico mal feito (em 2D, no entanto)

Gráfico de fluxo de água

Atualização: Estou considerando uma superfície de água muito simplificada (apenas um avião: sem ondulações, sem ondas, sem pressão etc.). Se qualquer um deles precisasse ser aplicado, a resposta dependeria de mais fatores do que apenas o normal.

Ivelate
fonte

Respostas:

13

Uma maneira de fazer isso, considerando que você deseja um ângulo de 90 °, é encontrar o produto cruzado do normal e da gravidade, normalizá-lo e depois cruzá-lo com o normal novamente.

No seu diagrama, a primeira cruzada produzirá um vetor apontando para a tela e a segunda cruzada produzirá o vetor de fluxo.

Um efeito colateral interessante do uso de produtos cruzados é que o vetor de fluxo será mais longo quanto mais longe o vetor normal da vertical, o que poderia ser usado para a velocidade do fluxo?

Isso pressupõe que você esteja usando um sistema de coordenadas destro; se seu sistema for à esquerda, o vetor intermediário apontará para fora da tela, mas ainda assim produzirá o mesmo resultado.

Chefão
fonte
Sim, isso parece ótimo. Mesmo que pareça tão simples quando explicado, passei meia hora pensando em diferentes maneiras (erradas) de fazê-lo, e perdi completamente essa. Obrigado!
Ivelate
Isso não produzirá nada que se pareça remotamente com o que você normalmente pensaria como uma direção de fluxo. Para ver por que considerar quais seriam as normais da superfície de um rio que flui pelo seu mapa e como elas diferem em um rio que flui de leste para oeste e de oeste para leste (ou seja, não são).
Jack Aidley
11
E se o normal e a gravidade forem (anti) paralelos? Não posso deixar de encontrar sentido nesta resposta. Como o @JackAidley disse, existem infinitas direções de fluxo possíveis, dadas a normalidade.
Margaret Bloom
11
Dado o modelo simplificado apresentado na pergunta, acredito que essa resposta produzirá o vetor que eles estavam procurando. @Margaret Se os vetores forem (anti) paralelos, o vetor de fluxo será (0,0,0), que seria o fluxo esperado em um corpo plano de água, ou seja, uma lagoa / lago
KingPin
@KingPin: Um rio também é um corpo de água plano, e a maioria dos lagos deságua nos rios.
Jack Aidley
1

Você não pode determinar a direção do fluxo de água a partir de suas normais de superfície; será necessário armazenar dados adicionais.

Uma simples viagem para olhar um rio deve ser suficiente para convencê-lo disso. Qualquer diferença nas normais da superfície reflete apenas ondulações na superfície, a massa de água continua a fluir na mesma direção. Mas a razão subjacente é porque o normal define um plano e você precisa de um vetor de fluxo. Seus vetores são sobre a forma da superfície e não o movimento da água.

Jack Aidley
fonte
11
Verdade, você está certo. Eu estava considerando apenas um corpo de água muito simplificado (sem ondulações, sem ondas, sem pressão etc.), mas certamente na vida real esse cálculo não seria tão simples. Vou atualizar a pergunta para esclarecer esses detalhes. Obrigado pela sua contribuição!
Marque