在这段代码中,1/cos(x)对于一款3d画布游戏有何意义?

What's the significance of 1/cos(x) in this code for a 3d canvas game?

本文关键字:于一款 布游戏 3d 游戏 何意义 cos 代码 段代码      更新时间:2023-09-26

我最近一直在尝试HTML5画布,并遇到了这个3d示例,其背后的代码相对较少。我希望找到一个很好的3d渲染介绍,但我有更多的麻烦理解代码背后的几何比我预期的。我设置了一个JSbin,复制了他网站上使用的代码来玩。我无法理解

的意思。
deltaX=1/Math.cos(theta);

后用在:

    if (deltaX>0) {
        stepX = 1;
        distX = (mapX + 1 - x) * deltaX;
    }
    else {
        stepX = -1;
        distX = (x - mapX) * (deltaX*=-1);      
    }

来源

我最好的猜测是它用于直角三角形中的关系cos(x) = adjacent/hypotenuse,但我不明白三角形适合在哪里,如果有的话。

如果您从原点(0, 0)沿方向theta(从x轴测量)画一条线,则

  • deltaX = 1/cos(theta)是这条线上到垂线x = 1相遇的距离,
  • deltaY = 1/sin(theta)是这条线上到水平线y = 1相遇的距离。

这确实是一个三角关系。在第一种情况下,三角形的点(0, 0)(1, 0)和直线与垂直线x=1相交的点(1, y)

(mapX, mapY)为整数坐标的网格点,(x, y)为正方形[mapX, mapX+1) x [mapY, mapY+1)中的点。

distX计算theta -方向下一个垂直网格线的距离,distY计算下一个水平网格线的距离。

备注:如果方向是π/2的倍数,即方向恰好是右、上、左或下,计算失败,因为在这种情况下sin(theta) = 0cos(theta) = 0。这可能不会发生在您的程序中,因为playerDirection0.4开始,并以0.07递增或递减。