协调我的Javascript游戏 - 基于一个角度,我什么时候使用Sin Cos和Tan?

时间:2011-02-17 10:51:05

标签: javascript math html5 canvas

JavaScript坐标Sin,Cos还是Tan? 我正在尝试在Web浏览器中学习一些用于游戏开发的基本三角函数。我知道soh cah toa rule等。我知道我们也在-1和1之间工作。

我很困惑,但我需要根据角度分别计算x和y坐标。

这是我必须在x和y中计算出我的角度方向,这确实有效(感谢Loktar)。

velY = -Math.cos(angle * Math.PI / 180) * thrust;
velX = Math.sin(angle * Math.PI / 180) * thrust;

我从中理解的是,我根据一个小公式找到x和y的cos,将我的角度变量转换为弧度。

但是,为什么cos需要用于x和sin用于y?晒黑在哪里?这是与圆的4个象限有关吗?

当我只给出一个角度时,我怎么知道何时使用sin cos或tan?我需要找出使用x,y的角度所在的圆圈的位置?

任何简单的图表或解释都会非常有用!

由于

1 个答案:

答案 0 :(得分:13)

基本定义(来自你的三角学书):

cos ϴ = x/h, sin ϴ = y/h

描述x,y和H的免费ASCII艺术:

         _
         /\  assume we're going this way 
        /
       /|
      / |
  h  /  |
    /   |  Y
   /    |
  /ϴ    |
 +-------
    X

矢量可以分成两个矢量的和。 (你可以在图中想到这一点,因为向东北方向移动H米与向东移动X米,向北移动为Y米)

在这种情况下,H对应于您当前的推力。你想找到那个推力的X和Y分量。

因为cosΘ= X / H(余弦的基本定义),我们可以说(通过简单代数)

X = H * cos ϴ
然而,Θ被假定为弧度量。如果您正在使用度数,则必须乘以Math.PI / 180才能获得正确的值。因此,你有

ϴ = angle * Math.PI / 180

我们非常接近!现在,我们经典的余弦定义公式(当翻译成我们的术语时)看起来像

cos (angle * Math.PI / 180) = X / H

H是我们的推力矢量,X只是推力矢量的水平部分。

“现在,等一下,”你说。 “为什么我用余弦来计算垂直速度呢?你的轴似乎翻了个身。”没错。这是标准的几何方向 - 角度测量为从-------->直接向右逆时针旋转。您的轴被翻转是因为您将角度存储为“时钟角度”,即0度为12:00。为了使用标准几何方程,我们必须镜像整个宇宙,以便翻转X和Y轴。幸运的是,这样做的数学方法就是在方程式中切换所有的X和Y.

standard 'math' coordinate system
            _
             /\  
            /
           /|
          / |       angles increase counterclockwise
      h  /  |
        /   |  Y
       /    |
      /ϴ    |
     +----------- (zero degrees starts here)
  (0,0)  X       


your coordinate system

  (zero degrees starts here)
       ^
       |   angles increase clockwise
       |   /
       |  /
       |ϴ/
       |/
       +

最后,为什么余弦中有负数?因为这是我们在

中进行数学运算的笛卡尔系统
 ^ y-axis
 |
 |
 +----> x-axis

这是你要绘制的笛卡尔系统(可能是画布)

+------> x-axis
|
|
v y-axis

由于y轴面向另一个方向,因此将所有y值乘以负数1以获得正确的方向