Tôi đang xem hướng dẫn raycasting tuyệt vời này tại http://lodev.org/cgtutor/raycasting.html và có một câu hỏi toán học rất đơn giản.
Trong thuật toán DDA, tôi gặp khó khăn trong việc tìm hiểu sự biến đổi của các biến deltaDistX và deltaDistY, đó là khoảng cách mà tia phải đi từ phía 1 x sang phía x tiếp theo hoặc từ 1 bên sang bên tiếp theo phía y, trong lưới ô vuông tạo nên bản đồ thế giới (xem ảnh chụp màn hình bên dưới).
Trong hướng dẫn, chúng được tính như sau, nhưng không có nhiều lời giải thích:
//length of ray from one x or y-side to next x or y-side
double deltaDistX = sqrt(1 + (rayDirY * rayDirY) / (rayDirX * rayDirX));
double deltaDistY = sqrt(1 + (rayDirX * rayDirX) / (rayDirY * rayDirY));
rayDirY và rayDirX là hướng của tia đã được đúc.
Làm thế nào để bạn có được những công thức? Có vẻ như định lý pythagore là một phần của nó, nhưng bằng cách nào đó có sự phân chia liên quan ở đây. Bất cứ ai cũng có thể gợi ý cho tôi về những kiến thức toán học mà tôi đang thiếu ở đây, hoặc "chứng minh" công thức bằng cách chỉ ra nó xuất phát như thế nào?