我正在尝试从另一个向量中最接近提供的角度的集合中找到2D向量。

因此,如果我有v(10, 10),并且想沿90度角找到最接近的其他矢量,则应该找到v(20, 10)。我写了一种方法,我认为它可以返回两个向量之间的正确方位。

float getBearing(
    const sf::Vector2f& a, const sf::Vector2f& b)
{
    float degs = atan2f(b.y - a.y, b.x - a.x) * (180 / M_PI);
    return (degs > 0.0f ? degs : (360.0f + degs)) + 90.0f;
}


这似乎可行,尽管如果我将一个放在另一个之上,则返回180(可以)和360(仅是奇数)。如果正好在0之上,它不应该返回0吗?最好的方法是检查360并返回0。

我的问题是我无法计算出通过角度(例如90度)与从getBearing返回的角度之间的差。我什至不确定在所有情况下返回的轴承是否正确。

谁能帮助纠正我的轴承方法中任何明显的错误,并提出一种方法来获得两个轴承之间的差异?我一直在通过互联网寻找东西,但是有很多方法可以做到,其中大多数以其他语言显示。

谢谢。

最佳答案

我建议采用被比较的两个向量,并做一个单位点积。最接近的方位应该最大,1表示最大值(表示向量指向相同的方向),-1表示最小值(表示向量指向相反的方向)。

关于c++ - 计算两个 vector 之间的方位,然后将其与通过角度进行比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14042698/

10-12 23:55