Diberikan kotak, dan titik dengan arah vektor menuju kotak. Bagaimana saya bisa menemukan titik terdekat di luar persegi panjang itu ke titik yang dimaksud?
mathematics
geometry
suatu hari nanti akan membuat
sumber
sumber
Jawaban:
Salah satu teknik yang bisa Anda gunakan disebut "ray casting". Ini biasanya digunakan untuk rendering grafik, tetapi memiliki aplikasi lain seperti line-of-sight (seperti yang Anda ingin lakukan) dan pencarian jalur. Secara umum ia bekerja dengan menemukan persimpangan sinar dan objek. Dalam contoh Anda, ray adalah vektor untuk arah karakter.
Referensi yang berguna untuk persimpangan ray / objek (dan persimpangan objek / objek lainnya) adalah www.realtimerendering.com/intersections.html (lihat di bawah referensi untuk ray / aabb dan ray / obb).
sumber
Kotak memiliki empat sisi. Setiap sisi adalah segmen garis.
Tes masing-masing dari empat sisi untuk persimpangan dengan sinar. Lacak hit terdekat.
Berikut ini beberapa kode untuk mencari tahu di mana pada segmen yang disentuh ray:
sumber
Jika kotak Anda sejajar sumbu, Anda hanya perlu menjepit masing-masing sumbu koordinat ke kotak jika titik di luar kotak.
Dari RTCD hal 130:
Jika Anda melakukan ini untuk sumbu x, y, z, maka
point
akan dibanting ke dinding terdekat kotak, jika itu di luar kotak untuk memulai. jika sudah ada di dalam kotak, itu akan dibiarkan sendiri (di mana itu).sumber
Nah, Anda bisa menggunakan aljabar linear saja (geometri analitik, untuk lebih spesifik) untuk menyelesaikan ini. Itu tergantung pada bagaimana Anda memodelkan persegi panjang.
Berikut ini adalah kasus umum: http://paulbourke.net/geometry/lineline2d/
sumber