我的 Javascript 游戏的坐标 - 基于角度,我啥时候使用 Sin Cos 和 Tan?

Posted

技术标签:

【中文标题】我的 Javascript 游戏的坐标 - 基于角度,我啥时候使用 Sin Cos 和 Tan?【英文标题】:Coordinates for my Javascript game - based on an angle, when do I use Sin Cos and Tan?我的 Javascript 游戏的坐标 - 基于角度,我什么时候使用 Sin Cos 和 Tan? 【发布时间】:2011-06-29 00:22:33 【问题描述】:

javascript 协调 Sin、Cos 还是 Tan? 我正在尝试在网络浏览器中学习一些用于游戏开发的基本三角函数。我知道 soh cah toa 规则等。我知道我们也在 -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,以将我的角度变量转换为弧度。

但是,为什么 x 需要使用 cos 而 y 需要使用 sin?棕褐色是从哪里来的?这和圆的四个象限有关吗?

当我只给定一个角度并且我需要使用 x,y 计算出该角度在圆上的位置时,我如何知道何时使用 sin cos 或 tan?

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

谢谢

【问题讨论】:

在我看来你正在做某种旋转(也许我错了;))。可能值得一读:en.wikipedia.org/wiki/Rotation_matrix 我正在计算我的对象的角度和它必须经过的路径。那个 Wiki 页面看起来就像我正在做的事情,它只是很充实,哈哈,我会试着理解它。 【参考方案1】:

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

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 以获得正确的方向

【讨论】:

这是一个很好的解释!我只是想了解第一个例子。我认为 cos=x/h 因为那将是相邻/斜边?另外,第一个图在左边,底部2个在右边,有什么原因吗?如果将三角形移到您的第二个图表中,这是否会起作用?这真的很有帮助......我做了一个简单的图表来表达我的理解,这是正确的吗? img576.imageshack.us/i/55330174.jpg 你是对的,cos应该是x/h。在我混淆任何人之前让我解决它:) 坐下来有成就感。伟大的!我喜欢这个东西。所以圆的任何象限都可以用来计算出这些东西。我想我应该在学校听得更多。再次感谢。 好的,添加了修复程序和一个图表来解释为什么你的 velY 是基于余弦而不是正弦。您的图表准确地描述了正弦和余弦的定义,但正如您从我可怕的糟糕 ASCII 艺术中看到的那样,您用于游戏的坐标系实际上与您的图表所在的坐标系不同。 我认为你的 ASCII 图表是史诗般的。谢谢你的解释!

以上是关于我的 Javascript 游戏的坐标 - 基于角度,我啥时候使用 Sin Cos 和 Tan?的主要内容,如果未能解决你的问题,请参考以下文章

加速度计磁力计求初始姿态角

MFC中的窗口角坐标

unity欧拉角之图文并茂通俗理解

欧拉角的详解

scratch例子:捕捉游戏

Unity基础:欧拉角、四元数