最近,我一直在尝试HTML5画布,并偶然发现this 3d example后面只有很少的代码。我希望能对3d渲染找到很好的介绍,但是在理解代码背后的几何图形方面比我期望的要麻烦得多。 I set up a JSbin,然后复制其网站上使用的代码。我一直在理解...的含义
deltaX=1/Math.cos(theta);
稍后用于:
if (deltaX>0) {
stepX = 1;
distX = (mapX + 1 - x) * deltaX;
}
else {
stepX = -1;
distX = (x - mapX) * (deltaX*=-1);
}
Source
我最好的猜测是,它用于直角三角形中的关系
cos(x) = adjacent/hypotenuse
,但我根本不知道该三角形适合的位置。 最佳答案
如果从原点(0, 0)
沿方向theta
绘制一条线(从x轴测量),则deltaX = 1/cos(theta)
是直到垂直线x = 1
为止的这条线上的距离,并且deltaY = 1/sin(theta)
是这条线上直到达到水平线y = 1
的距离。
确实是三角关系。在第一种情况下,三角形具有点(0, 0)
,(1, 0)
和线与垂直线(1, y)
相交的点x=1
。(mapX, mapY)
是具有整数坐标的网格点,(x, y)
是正方形[mapX, mapX+1) x [mapY, mapY+1)
中的点。distX
计算沿theta
方向的下一条垂直网格线的距离,以及distY
沿水平的下一条网格线的距离。
备注:如果方向是π/ 2的倍数,即方向完全是右,上,左或下,则计算将失败,因为在这种情况下是sin(theta) = 0
或cos(theta) = 0
。这可能在您的程序中不会发生,因为playerDirection
以0.4
开头,并以0.07
递增或递减。