【发布时间】:2014-01-09 02:45:53
【问题描述】:
我有一个向上矢量方向为 Vector(0, -1) 的圆和一个点 B,它可以在该圆上的任何位置。我知道它在圆圈内的确切位置。 (0,0) 点位于图像的左上角。
如何找到点 B 和上向量之间相对于圆心的角度 x?
我正在用 XNA 和 C# 开发游戏。
更新:我不明白为什么这个问题被标记为与编程无关。无论如何,这是我到目前为止所做的。
我可以找到两个向量之间的弧度
private float radianBetweenVectors(Vector2 a, Vector2 b)
{
return (float)Math.Atan2(b.Y - a.Y, b.X - a.X);
}
但如果可能的话,我不想知道向上矢量在精灵图像上的位置。这里的位置是圆的圆周上从 0 度开始的点。
更新 2:
一旦我有了角度,我想获得旋转矩阵:
Matrix rotMatrix = Matrix.CreateRotationZ(angle);
现在我有了这个包含旋转的矩阵,我可以让 XNA 用这个旋转来变换 Up 向量:
moveDirection = Vector2.Transform(up, rotMatrix);
我希望这将采用原来的向上方向,通过围绕 Z 轴的旋转进行变换。我仍在试图弄清楚这是否是正确的方法。
【问题讨论】:
-
为什么投反对票而这个问题与编程无关?
-
到目前为止,您还没有表现出对问题的数学部分的理解——所以“与编程无关”和“对问题没有表现出最低限度的理解”......
-
可能的原因是这个网站通常不喜欢不显示任何代码的问题。如果我错了,请纠正我(我没有投反对票)。
-
好的,我已经展示了代码。以后还会有更多。
-
+1。现在看起来好多了。谢谢。现在很清楚问题出在哪里(基本向量数学) - 正如 Luís Assunção 的答案所示,通常使用标量乘法来查找
cos而不是获得角度......并且“向上”始终是(0,1)或(0, -1)取决于您的坐标系统(请注意,您需要将其与 XNA 匹配) - 所以您不需要计算它....