Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 光线投射';s公式_Math_2d_Trigonometry_Raycasting - Fatal编程技术网

Math 光线投射';s公式

Math 光线投射';s公式,math,2d,trigonometry,raycasting,Math,2d,Trigonometry,Raycasting,我正在使用光线投射(只是重新制作旧的好wolf3d游戏)进行项目。我由一个指导老师带领。我被困在理解他所用的数学中。我试着进入它,花了很多时间在谷歌上搜索、画画和解决它,但我没有得到那个结果。在这里提问,因为math和gamedev社区看起来人口较少。gamedev社区也有和我一样的问题,但仍然没有答案。所以,也许有数学好的人可以解释一下 下面是一篇教程的内容: 当从几何角度推导deltaDistX时,使用毕达哥拉斯,可以得到公式“sqrt(1+(rayDirY*rayDirY)/(rayDi

我正在使用光线投射(只是重新制作旧的好wolf3d游戏)进行项目。我由一个指导老师带领。我被困在理解他所用的数学中。我试着进入它,花了很多时间在谷歌上搜索、画画和解决它,但我没有得到那个结果。在这里提问,因为math和gamedev社区看起来人口较少。gamedev社区也有和我一样的问题,但仍然没有答案。所以,也许有数学好的人可以解释一下

下面是一篇教程的内容:

当从几何角度推导deltaDistX时,使用毕达哥拉斯,可以得到公式“sqrt(1+(rayDirY*rayDirY)/(rayDirX*rayDirX)),但这可以简化为abs(1/rayDirX)。类似地,deltaDistY是“sqrt(1+(rayDirX*rayDirX)/(rayDirY*rayDirY)),可以简化为abs(1/rayDirY)

rayDirX和rayDirY是光线的X和Y坐标。网格的每一侧都是1。我想这与重新调整毕达哥拉斯定理有关。但这是如何简化为这个的呢

abs(1/rayDirX)和abs(1/rayDirY)


非常感谢您提供的任何帮助和信息。

我在遵循《洛德夫指南》时也遇到了同样的问题。他问自己。这是他的回答:

为了简洁起见,我们把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)

当我遵循洛德夫指南时,我也有同样的问题。他问自己。这是他的回答:

为了简洁起见,我们把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)

参见。。。IIRC简化是简单的
tan
方程,当一个轴为
1
时,另一个轴转换为
tan(a)=dy/1
tan(a)=1/dx
。。。其中
a
是投射光线的角度。。。因此,您应该以类似于
dy=tan(a)
dx=1/tan(a)
的方式结束。。。并且
tan(a)
1/tan(a)
都可以在某些LUT中预先计算速度(通常在固定点中以避免FPU和分割)。。。您的简化方程式已经可以缩放,因此缺少
tan
。@Spektre感谢您的反馈!这可能是因为晒黑的缘故,但无论如何,我不介意把它放在正确的地方,让它工作起来。代码中没有与tan相关的内容。但我看到了在计算中使用tan来获得这个距离的指南。不管怎样,我很高兴你回答了这个:)看。。。IIRC简化是简单的
tan
方程,当一个轴为
1
时,另一个轴转换为
tan(a)=dy/1
tan(a)=1/dx
。。。其中
a
是投射光线的角度。。。因此,您应该以类似于
dy=tan(a)
dx=1/tan(a)
的方式结束。。。并且
tan(a)
1/tan(a)
都可以在某些LUT中预先计算速度(通常在固定点中以避免FPU和分割)。。。您的简化方程式已经可以缩放,因此缺少
tan
。@Spektre感谢您的反馈!这可能是因为晒黑的缘故,但无论如何,我不介意把它放在正确的地方,让它工作起来。代码中没有与tan相关的内容。但我看到了在计算中使用tan来获得这个距离的指南。无论如何,我很高兴你回答了这个问题:)