在这段代码中,1/cos(x)对于一款3d画布游戏有何意义?
What's the significance of 1/cos(x) in this code for a 3d canvas game?
我最近一直在尝试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) = 0
或cos(theta) = 0
。这可能不会发生在您的程序中,因为playerDirection
从0.4
开始,并以0.07
递增或递减。
相关文章:
- 石头剪刀布游戏功能在Javascript
- SlideJS隐藏仅适用于一次
- jQuery表单验证只适用于一次发布
- 为什么 .data() 适用于一组元素,但不适用于单个元素
- Javascript Switch 语句中的默认值仅适用于一种情况,但不适用于两种情况
- 字符编码适用于一页,但不适用于另一页
- 尝试为石头剪刀布游戏显示图像而不是字母
- 制作一个不带eval()的动态变量,该变量对应于一个数组
- 生成类似于一种颜色的可微分颜色
- Trello API访问仅适用于一个人
- Three.js Fog仅适用于一种特定情况
- 检查一个类是否存在于一组选定的元素中
- 石头剪刀布游戏错误,Javascript
- 这是一款基于html5 canvas (javascript API)的开源游戏
- 我能否为Android制作一款HTML5游戏?
- 尝试着创造一款《Blackjack》游戏,却不知道在动态创造元素后该何去何从
- 我无法完成一款简单的JS数学游戏
- 在这段代码中,1/cos(x)对于一款3d画布游戏有何意义?
- 设计一款可收集的卡牌游戏
- 尝试着创造一款简单的多项选择游戏