Jadi saya memiliki objek yang bergerak ke arah dinding horizontal atau vertikal yang tetap. Bagaimana cara menghitung sudut tempat objek terpental? Objek dapat mendekati dinding pada sudut yang sewenang-wenang.
sumber
Jadi saya memiliki objek yang bergerak ke arah dinding horizontal atau vertikal yang tetap. Bagaimana cara menghitung sudut tempat objek terpental? Objek dapat mendekati dinding pada sudut yang sewenang-wenang.
Jika Anda tahu vektor normal dinding dan memiliki arah masuk untuk objek, maka yang Anda inginkan adalah refleksi dari vektor melintasi pesawat .
Jika n adalah vektor yang dinormalisasi, dan v adalah arah yang masuk , maka yang Anda inginkan adalah - (2 ( n · v ) n - v ). Tanda minus menjelaskan fakta bahwa rumus pantulan sebenarnya tidak membalik arah, karena kecepatan objek akan terbalik.
Jawaban ini diberikan dalam bentuk vektor matematika, bukan sudut, karena itu biasanya lebih baik jika Anda tidak memiliki alasan eksplisit untuk menggunakan sudut. Perhatikan bahwa jika Anda harus berbicara tentang sudut, sudut pantulan sama dengan sudut kejadian. Jika sudut diukur dari normal, sudut keluar adalah negasi dari sudut masuk; jika sudut diukur dari dinding, maka itu adalah pelengkap dari sudut yang masuk.
Anda tidak menentukan apakah itu game 2D atau 3D. Tetapi jika ini adalah permainan 2D dan dinding Anda dijamin horizontal atau vertikal dan Anda hanya ingin memantulkan objeknya, ada cara yang jauh lebih mudah daripada harus berurusan dengan pantulan.
Cukup meniadakan komponen-X dari kecepatan objek ketika mengenai dinding vertikal, atau komponen-Y dari kecepatan objek ketika mengenai dinding horizontal. Contoh:
Tetapi jika Anda benar-benar peduli tentang mengetahui sudut, maka secara umum, sudut refleksi sama dengan sudut kejadian. Sudut ini diukur dalam kaitannya dengan normal dinding. Inilah gambar yang harus membuatnya jelas:
Jika Anda perlu menangani ini untuk dinding sewenang-wenang, Anda harus melihat cara memantulkan vektor. Ini benar-benar hanya formula kecil yang mengambil vektor normal dan vektor insiden dinding, dan mengembalikan vektor yang dipantulkan untuk Anda. Berikut rumus yang digunakan XNA:
Dan untuk 2D Anda bisa melakukannya:
sumber
if it's a 2D game and your walls are guaranteed to be horizontal or vertical
tidak benar. Bagian kedua dari jawaban mendukung implementasi yang benar. IMHO, urutan bagian-bagian harus dibalik, menyajikan solusi umum terlebih dahulu dan dalam penekanan, sedangkan solusi sudut kanan disajikan sebagai penyederhanaan untuk kasus luar biasa.Ini hanya tentang memantulkan vektor sepanjang dinding vektor normal.
http://www.3dkingdoms.com/weekly/weekly.php?a=2
sumber