gpt4 book ai didi

c++ - 计算两个 vector 之间的方位,然后将其与通过的角度进行比较

转载 作者:太空宇宙 更新时间:2023-11-04 16:23:52 24 4
gpt4 key购买 nike

我试图在一组中找到最接近另一个 vector 所提供角度的二维 vector 。

所以如果我有 v(10, 10) 并且我想沿着 90 度角找到最近的另一个 vector ,它应该找到 v(20, 10),例如。我编写了一种方法,我认为它会返回两个 vector 之间的正确方位角。

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 吗?我想最好的方法是检查 360 并返回 0。

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

任何人都可以帮助纠正我的轴承方法中任何明显的错误并建议一种方法来区分两个轴承之间的差异吗?我一直在网上搜索,但有很多方法可以做到这一点,其中大部分都以其他语言显示。

谢谢。

最佳答案

如果你只需要找到离某个角度最近的 vector ,你可以按照@swtdrgn 方法;相反,如果您实际上需要计算两个 vector 之间的角度差,则可以利用点积的一个简单属性:

dot product geometric definition

其中 theta 是两个 vector 之间的角度;因此,反转公式,你会得到:

inverse of the formula above

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com