C# 求两个向量之间的角度

C# 求两个向量之间的角度,c#,xna,angle,C#,Xna,Angle,我已经读了一些关于两个向量之间的角度的重复答案,但我仍然坚持我的问题。我有两个向量,我希望它们之间的角度总是90度。为了达到这个目的,我需要找到它们之间的角度,这样我可以减去或添加正确的度数,这样它们之间的角度总是90度 图中显示了一个精灵和两个向量。我如何找到它们之间的角度A?我曾尝试使用此代码来获取两个向量之间的角度,但我肯定遗漏了什么,因为我没有得到正确的结果: public float GetAngleBetween (Vector2 A, Vector2 B)

我已经读了一些关于两个向量之间的角度的重复答案,但我仍然坚持我的问题。我有两个向量,我希望它们之间的角度总是90度。为了达到这个目的,我需要找到它们之间的角度,这样我可以减去或添加正确的度数,这样它们之间的角度总是90度

图中显示了一个精灵和两个向量。我如何找到它们之间的角度A?我曾尝试使用此代码来获取两个向量之间的角度,但我肯定遗漏了什么,因为我没有得到正确的结果:

        public float GetAngleBetween (Vector2 A, Vector2 B)
    {
        float DotProd = Vector2.Dot (A, B);
        float Length = A.Length () * B.Length ();
        return (float)MathHelper.ToDegrees ((float)Math.Acos (DotProd/Length));
    }

欢迎任何输入,并提前感谢您的回答。

我想您可能正在寻找用于计算两个向量乘积的方法,也可以用于角度计算

例如:

// the angle between the two vectors is less than 90 degrees. 
Vector2.Dot(vector1.Normalize(), vector2.Normalize()) > 0 

// the angle between the two vectors is more than 90 degrees. 
Vector2.Dot(vector1.Normalize(), vector2.Normalize()) < 0 

// the angle between the two vectors is 90 degrees; that is, the vectors are orthogonal. 
Vector2.Dot(vector1.Normalize(), vector2.Normalize()) == 0 

// the angle between the two vectors is 0 degrees; that is, the vectors point in the same direction and are parallel. 
Vector2.Dot(vector1.Normalize(), vector2.Normalize()) == 1 

// the angle between the two vectors is 180 degrees; that is, the vectors point in opposite directions and are parallel. 
Vector2.Dot(vector1.Normalize(), vector2.Normalize()) == -1 
//两个矢量之间的角度小于90度。
Vector2.Dot(vector1.Normalize(),Vector2.Normalize())>0
//两个矢量之间的角度大于90度。
Vector2.Dot(vector1.Normalize(),Vector2.Normalize())<0
//两个矢量之间的角度为90度;也就是说,向量是正交的。
Vector2.Dot(vector1.Normalize(),Vector2.Normalize())==0
//两个矢量之间的角度为0度;也就是说,向量指向同一方向且平行。
Vector2.Dot(vector1.Normalize(),Vector2.Normalize())==1
//两个矢量之间的角度为180度;也就是说,向量指向相反的方向并且是平行的。
Vector2.Dot(vector1.Normalize(),Vector2.Normalize())=-1

这就是你要找的,还是你需要准确的角度?

以弧度为单位的实际角度是

Math.ACos(Vector2.Dot(a, b));

确保a和b是标准化向量,否则结果可能会变得非常奇怪。

如果我理解你的问题图和评论,你需要的信息不仅仅是点积和ACO。您还需要说明精灵何时不位于(0,0)


我希望这里的答案()会有用。谢谢你的回答,但我确实需要准确的角度。Vector2.Dot(vector1.Normalize(),Vector2.Normalize())应该给出角度的cos…我听说XNA计算角度的参考点是(0,0)。所以如果我的精灵在屏幕的左上角,向量1和2之间的角度是90度。但是,如果我围绕参照点移动精灵,角度会根据参照点的变化而变化。是否可以更改此参考点?因为两点和我的精灵中心之间的角度仍然是90度,即使根据参考点计算出的角度也是另一回事。在寻找上面的答案时,我看到不同的论坛都有相同的问题。当要求更改参考点时,没有向他们提供解决方案。
float angleInRadians = (float) Math.Acos(Vector2.Dot(Vector2.Normalize(vector1 - spritePosition), Vector2.Normalize(vector2 - spritePosition)));

int angleInDegrees = MathHelper.ToDegrees(angleInRadians);