C# 在XNA中测量两个矢量之间的角度

C# 在XNA中测量两个矢量之间的角度,c#,vector,xna,rotation,trigonometry,C#,Vector,Xna,Rotation,Trigonometry,我正在创建一个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).ToStrin

我正在创建一个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

想一想,我假设它是水平线,即向量2(0,0)和向量2(111,0),向量2(0,0)和向量2(223110)之间的角度,对吗


然而,如果我用tanx=110/223计算角度,我得到的角度是26.25。我遗漏了什么?

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

也许你对你想要计算的角度的定义是错误的,因为我很难看出这两点是如何形成90度角的

下面是我在纸上画的关于这两点的速写(请原谅我的疏忽!)


Y坐标方向错误,但问题是相同的。

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

也许你对你想要计算的角度的定义是错误的,因为我很难看出这两点是如何形成90度角的

下面是我在纸上画的关于这两点的速写(请原谅我的疏忽!)


我的Y坐标方向错误,但问题是相同的。

您计算的角度是正确的。请记住,在XNA中,“向上”方向被视为0度。您计算的角度是正确的。请记住,在XNA中,“向上”方向被视为0度。因此,对于这两个点,角度实际上是从x轴到连接这两个点的线测量的?这意味着它们的共同原点从(111,0)开始,而不是(0,0)?是和否。你可以从轴上测量它,但这不一定是正确的方式来看待问题,因为当你的一个或所有点不在轴上时,你会再次挣扎。正是这样。如果你在两点之间画一条线,如果“向上”是0度,你可以估计这个角度是45度。那么对于这两点,这个角度实际上是从x轴到连接两点的线测量的?这意味着它们的共同原点从(111,0)开始,而不是(0,0)?是和否。你可以从轴上测量它,但这不一定是正确的方式来看待问题,因为当你的一个或所有点不在轴上时,你会再次挣扎。正是这样。如果在两点之间画一条线,并且“向上”为0度,则可以估计该角度为45度。