光线投射公式理解

Raycasting's formula understending

我正在使用光线投射进行项目(只是重新制作旧的好 wolf3d 游戏)。我由一个教程领导。我一直无法理解他在其中使用的数学。我试图进入它并浪费了很多时间谷歌搜索,绘图和解决它,但我无法得到那个结果。在这里问,因为数学和游戏开发社区看起来人口少得多。还有 gamedev community 也有和我一样的问题,但仍然没有答案。所以,也许数学好的人可以解释一下。

教程是这么说的:

When deriving deltaDistX geometrically you get, with Pythagoras, the formula "sqrt(1 + (rayDirY * rayDirY) / (rayDirX * rayDirX))", but this can be simplified to abs(1 / rayDirX). Similarly, deltaDistY is "sqrt(1 + (rayDirX * rayDirX) / (rayDirY * rayDirY))" which can be simplified to abs(1 / rayDirY).

rayDirX 和rayDirY 是我们射线的X 和Y 坐标。网格的每一侧都是 1。我猜它与重新缩放毕达哥拉斯定理 here it goes 有关。但是这怎么简化成这样呢?

abs(1 / rayDirX) and abs(1 / rayDirY)

感谢任何帮助和信息。

我在看lodev指南的时候也遇到了同样的问题。问自己。这是他的回复:

为简洁起见,我们将 rayDirX 和 rayDirY 称为 x 和 y。那么:

sqrt(1 + y * y / (x * x)) = sqrt((x * x + y * y) / (x * x))

但是我们知道rayDir的长度永远是1,所以(x * x + y * y)就是1 所以 sqrt(1 / (x * x)) 等于 abs(1 / x).