两个向量之间的2D视角(Angle between two Vectors 2D)

2019-08-02 23:10发布

我试图计算两个向量之间的角度。 我想这一点,但它总是返回零:

public double GetAngle(Vector2 a, Vector2 b)
{
double angle = Math.Atan2(b.Y, b.X) - Math.Atan2(a.Y, a.X);
return angle;
}

GetAngle(new Vector2(1,1), new Vector2(50,50));

Answer 1:

你应该看一看的文件atan2 ( 在这里 )。

您要查找的是找到B之间(您左上载体)和A(你的右下角向量)的差异,然后通过这个作为参数传递给atan2

return Math.Atan2(b.Y - a.Y,b.X - a.X);

你的代码目前所做的是找到矢量的角度b参考0,0和减去矢量的角度a参考0,0

你总是得到0的原因是1,150,50是上穿过同一条线路0,0 (两个通话大约有返回值。 0.785398 ),所以减去它们会导致0



Answer 2:

我想代码显示如下从.NET源代码拷贝可以帮助你。

参考: http://referencesource.microsoft.com/#WindowsBase/Base/System/Windows/Vector.cs,102

/// <summary>
/// AngleBetween - the angle between 2 vectors
/// </summary>
/// <returns>
/// Returns the the angle in degrees between vector1 and vector2
/// </returns>
/// <param name="vector1"> The first Vector </param>
/// <param name="vector2"> The second Vector </param>
public static double AngleBetween(Vector vector1, Vector vector2)
{
    double sin = vector1._x * vector2._y - vector2._x * vector1._y;  
    double cos = vector1._x * vector2._x + vector1._y * vector2._y;

    return Math.Atan2(sin, cos) * (180 / Math.PI);
}


Answer 3:

你必须使用在X和Y的ATAN2方法内部的差异:

Math.Atan2(b.Y - a.Y,b.X - a.X);

另外,我相信这会让你从角0至您所提供(不完全确定)的三角形的斜边。

我建议尝试Math.PI - angle



Answer 4:

一个简单的解决方案应该是这样的:

Vector2 a_normalized = normalize(a);
Vector2 b_normalized = normalize(b);
double angle = arccos(dot(a_normalized,b_normalized));

http://simple.wikipedia.org/wiki/Dot_product

这是伪代码,因为C#是不是我的世界。 抱歉



Answer 5:

如果你正在寻找的“向量a和b之间的角”,你想要的角度矢量和向量b角的三角:

Math.Atan2(b.Y, b.X) - Math.Atan2(a.Y, a.X)

但该图不匹配“向量之间的角度”。 对于图中的答案确实是给以前的答案:

Math.Atan2(b.Y - a.Y, b.X - a.X)


Answer 6:

我有点迟到了,但如何在Vector类的静态方法:

Vector.AngleBetween(vector1, vector2)


Answer 7:

黄褐色(角度)=相反/ adjascent

反正切(对面/ adjascent)=角

相反= AY - 由

adjascent = BX - 斧

Math.Atan((a.Y - b.Y) / (b.X - a.X));


Answer 8:

因为你使用vector2类,我想你可以使用

AB

从获得的向量到B。

所以你需要的角度是:皮 - 角(AB)。



文章来源: Angle between two Vectors 2D
标签: c# vector xna