我的 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?的主要内容,如果未能解决你的问题,请参考以下文章