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

Hen*_*ryz 3 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;
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

谢谢

Jim*_*mmy 13

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

cos ? = x/h, sin ? = y/h
Run Code Online (Sandbox Code Playgroud)

用于描述x,y和H的无偿ASCII艺术:

         _
         /\  assume we're going this way 
        /
       /|
      / |
  h  /  |
    /   |  Y
   /    |
  /?    |
 +-------
    X
Run Code Online (Sandbox Code Playgroud)

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

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

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

X = H * cos ?
Run Code Online (Sandbox Code Playgroud)

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

? = angle * Math.PI / 180
Run Code Online (Sandbox Code Playgroud)

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

cos (angle * Math.PI / 180) = X / H
Run Code Online (Sandbox Code Playgroud)

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
       |   /
       |  /
       |?/
       |/
       +
Run Code Online (Sandbox Code Playgroud)

最后,为什么余弦中有负数?因为这里是我们数学中的笛卡尔系统

 ^ y-axis
 |
 |
 +----> x-axis
Run Code Online (Sandbox Code Playgroud)

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

+------> x-axis
|
|
v y-axis
Run Code Online (Sandbox Code Playgroud)

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