如何在 JavaScript 中编写此 C# Z 轴矢量旋转?
How can I write this C# Z-axis vector rotation in JavaScript?
我用 C# 编写了一个非常简单的 XNA 游戏,它使用以下方法在射弹飞向目标时旋转地改变射弹。这个objective就是让弹丸有点'homing':
float rotation;
Vector2 velocity;
int speed;
public void SetRotation(float value) // Make the projectiles homing
{
rotation = value;
velocity = Vector2.Transform(new Vector2(0, -speed),
Matrix.CreateRotationZ(rotation));
}
我正在尝试(出于我自己的学习目的 - 我是 JavaScript 的新手)将我的游戏移植到 JavaScript 并允许它在 canvas 中运行。谁能建议我如何将上述方法重写为 JS 函数?
作为 JavaScript 的完全初学者,使用某种现有框架最容易完成吗?
旋转向量的方法涉及一些基本的矩阵数学。 (请原谅 ASCII 艺术。没有 LaTeX 让这更困难)
首先以齐次坐标形式表示向量:
[ x ]
v = | y |
| z |
[ 1 ]
旋转矩阵由:
提供
[ cos(r) -sin(r) 0 0 ]
M = | sin(r) cos(r) 0 0 |
| 0 0 1 0 |
[ 0 0 1 1 ]
其中r
是关于Z
的旋转量
要应用变换,请将矩阵 M
乘以向量 v
:
[ cos(r) -sin(r) 0 0 ] [ x ]
v' = Mv = | sin(r) cos(r) 0 0 | * | y |
| 0 0 1 0 | | z |
[ 0 0 0 1 ] [ 1 ]
化简乘法得到公式
v' = { x' = x * cos(r) - y * sin(r)
{ y' = x * sin(r) + y * cos(r)
{ z' = z
(注意:在 Javascript 中,sin()
和 cos()
函数采用弧度参数。)
我用 C# 编写了一个非常简单的 XNA 游戏,它使用以下方法在射弹飞向目标时旋转地改变射弹。这个objective就是让弹丸有点'homing':
float rotation;
Vector2 velocity;
int speed;
public void SetRotation(float value) // Make the projectiles homing
{
rotation = value;
velocity = Vector2.Transform(new Vector2(0, -speed),
Matrix.CreateRotationZ(rotation));
}
我正在尝试(出于我自己的学习目的 - 我是 JavaScript 的新手)将我的游戏移植到 JavaScript 并允许它在 canvas 中运行。谁能建议我如何将上述方法重写为 JS 函数?
作为 JavaScript 的完全初学者,使用某种现有框架最容易完成吗?
旋转向量的方法涉及一些基本的矩阵数学。 (请原谅 ASCII 艺术。没有 LaTeX 让这更困难)
首先以齐次坐标形式表示向量:
[ x ]
v = | y |
| z |
[ 1 ]
旋转矩阵由:
提供 [ cos(r) -sin(r) 0 0 ]
M = | sin(r) cos(r) 0 0 |
| 0 0 1 0 |
[ 0 0 1 1 ]
其中r
是关于Z
要应用变换,请将矩阵 M
乘以向量 v
:
[ cos(r) -sin(r) 0 0 ] [ x ]
v' = Mv = | sin(r) cos(r) 0 0 | * | y |
| 0 0 1 0 | | z |
[ 0 0 0 1 ] [ 1 ]
化简乘法得到公式
v' = { x' = x * cos(r) - y * sin(r)
{ y' = x * sin(r) + y * cos(r)
{ z' = z
(注意:在 Javascript 中,sin()
和 cos()
函数采用弧度参数。)