【问题标题】:Measuring angle between two vectors in XNA在 XNA 中测量两个向量之间的角度
【发布时间】:2014-01-09 11:00:18
【问题描述】:

我正在创建一个 XNA 游戏,但在角度旋转方面与标准笛卡尔坐标不同,我有点困惑。

假设我有以下,我想找到这些向量之间的角度

Vector2 p1 = new Vector2(111, 0);
Vector2 p2 = new Vector2(223, 110);

float angle = (float)Math.Atan2(p2.Y - p1.Y, p2.X - p1.X);
Debug.WriteLine(MathHelper.ToDegrees(angle).ToString());

我想这个角度应该接近 90 度,但它给出了 44.48384。

想一想,我是否正确假设它是水平线之间的角度,即 Vector2(0,0) 和 Vector2(111, 0) 和 Vector2(0,0) 和 Vector2(223, 110) ?

但是,如果我使用 tan x = 110 / 223 计算角度,我得到的角度是 26.25。我错过了什么?

【问题讨论】:

  • 您计算的角度是正确的。请记住,在 XNA 中,“向上”方向被视为 0 度。

标签: c# vector xna rotation trigonometry


【解决方案1】:

角度 44.48384°,如果您测量的是围绕原点的角度(如您所料,因为“两个向量之间的角度”)。

也许您对要计算的角度的定义不正确,因为我正在努力了解这两个点如何形成 90° 的角度。

这是我在纸上画的这两点的速写(请原谅我的粗俗!):

我的 Y 坐标方向错误,但问题是一样的。

【讨论】:

  • 那么对于这两个点,角度实际上是从x轴到连接两个点的线测量的?意味着它们的共同起源从 (111, 0) 而不是 (0, 0) 开始?
  • 是和不是。您可以从轴上测量它,但这不一定是看待问题的正确方法,因为当您的一个或所有点不在轴上时,您将再次陷入困境。
  • 正是这个。如果在两点之间画一条线,如果“向上”为 0 度,则可以估计该角度为 45 度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多