Dapatkan vektor arah aliran air dari vektor normal air

8

Saya terjebak mengembangkan detail penting air permainan saya: Membuatnya mengalir ke bawah!

Mengingat dunia 3D yang khas dalam air yang cenderung menuju gravitasi g=(0,-1,0), dan memiliki permukaan air yang normal n=(x,y,z), bagaimana saya bisa menghitung, berdasarkan itu, vektor arah aliran air?

Sebagai contoh, perhatikan grafik yang dikerjakan dengan buruk ini (Dalam 2D, meskipun)

Grafik aliran air

Update: Saya sedang mempertimbangkan permukaan air yang sangat sederhana (Hanya pesawat: Tidak ada riak, tidak ada gelombang, tidak ada tekanan, dll.). Jika salah satu dari itu perlu diterapkan, jawabannya akan tergantung pada lebih banyak faktor daripada hanya normal.

Ivelate
sumber

Jawaban:

13

Salah satu cara untuk melakukannya, mengingat Anda menginginkan sudut 90 °, adalah dengan menemukan produk silang dari normal dan gravitasi, menormalkannya, lalu melintasinya dengan normal lagi.

Dalam diagram Anda, salib pertama akan menghasilkan vektor yang menunjuk ke layar, dan salib kedua akan menghasilkan vektor aliran.

Efek samping yang menarik dari penggunaan produk silang adalah bahwa vektor aliran akan lebih lama semakin jauh vektor normal jauh dari vertikal, yang dapat digunakan untuk kecepatan aliran?

Ini mengasumsikan Anda menggunakan sistem koordinat tangan kanan, jika sistem Anda adalah tangan kiri, vektor perantara akan menunjukkan layar sebagai gantinya, tetapi masih akan menghasilkan hasil yang sama.

Gembong
sumber
Ya, itu terlihat bagus. Bahkan kelihatannya sangat sederhana ketika dijelaskan, saya menghabiskan setengah jam untuk memikirkan cara-cara yang berbeda (salah) untuk melakukannya, dan saya melewatkan yang satu ini sepenuhnya. Terima kasih!
Ivelate
Ini tidak akan menghasilkan apa pun yang menyerupai apa yang biasanya Anda pikirkan sebagai arah aliran. Untuk melihat mengapa mempertimbangkan apa normals permukaan sungai yang mengalir di peta Anda akan dan bagaimana mereka akan berbeda di sungai yang mengalir dari timur ke barat dan barat ke timur (yaitu mereka tidak).
Jack Aidley
1
Bagaimana jika normal dan gravitasinya (anti) paralel? Saya tidak bisa membantu tetapi tidak menemukan akal dalam jawaban ini. Seperti yang dikatakan @JackAidley, ada banyak kemungkinan arah aliran yang diberikan secara normal.
Margaret Bloom
1
Mengingat model sederhana yang disajikan dalam pertanyaan, saya yakin jawaban ini akan menghasilkan vektor yang mereka cari. @Margaret Jika vektornya (anti) paralel maka vektor alirannya akan menjadi (0,0,0) yang akan menjadi aliran yang diharapkan dalam badan air yang datar, yaitu kolam / danau
KingPin
@ KingPin: Sungai juga merupakan badan air yang datar, dan sebagian besar danau mengalir ke sungai.
Jack Aidley
1

Anda tidak dapat menentukan arah aliran air dari permukaan normalnya, Anda harus menyimpan data tambahan.

Perjalanan sederhana untuk melihat sungai harus cukup untuk meyakinkan Anda tentang hal ini. Perbedaan apa pun di permukaan normal hanya mencerminkan riak di permukaan, massa air terus mengalir ke arah yang sama. Tetapi alasan yang mendasarinya adalah karena normal mendefinisikan sebuah pesawat dan Anda memerlukan vektor aliran. Vektor Anda adalah tentang bentuk permukaan, bukan pergerakan air.

Jack Aidley
sumber
1
Benar, kamu benar. Saya sedang mempertimbangkan hanya badan air yang sangat sederhana (Tidak ada riak, tidak ada gelombang, tidak ada tekanan, dll), tetapi tentu saja dalam kehidupan nyata perhitungan ini tidak akan begitu sederhana. Saya akan memperbarui pertanyaan untuk memperjelas rincian itu. Terima kasih atas masukan Anda!
Ivelate