0

目前我正在将桌面应用程序转换为 Windows 8 应用程序。为了在桌面应用程序中获得 2 点之间的角度,他们使用 Vector.AngleBetween(vector1, vector2)。使用“Point”我得到了 WinRT 中的向量值。像这样,

var vectorX = point1.X - point2.X;
var vectorY = point1.Y - point2.Y;

Point vector = new Point(vectorX , vectorY);

但我没有找到任何方法来获得 WinRT 中 2 点之间的角度。我从网上得到了这个功能,

public double GetAngleOfLineBetweenTwoPoints(Point p1, Point p2)
    {
        var xDiff = p2.X - p1.X;
        var yDiff = p2.Y - p1.Y;
        return Math.Atan2(yDiff , xDiff) * (180 / Math.PI);
    }

但它不会给出像“Vector.AngleBetween”这样的确切结果。有没有更好的方法可以在 WinRT 中获得像“Vector.AngleBetween”这样的结果......?

4

1 回答 1

1

我不认为你的数学是正确的。您可以使用点积和arcus cosinus计算向量之间的角度,伪代码如下:

double vectorALength = sqrt(vectorA.x * vectorA.x + vectorA.y * vectorA.y);
double vectorBLength = sqrt(vectorB.x * vectorB.x + vectorB.y * vectorB.y);
double dotProduct = vectorA.x * vectorB.x + vectorA.y + vectorB.y
double cosAngle = dotProduct / (vectorALength * vectorBLength);
double angle = Math.Acos(cosAngle) * (180 / Math.PI);

如果我是正确的,这应该给你大致正确的答案。可以在互联网上找到详细信息和更好的解释,例如点积

于 2013-05-23T09:55:30.383 回答