【问题标题】:How to work out the angle between two 2D vectors using cross product?如何使用叉积计算两个二维向量之间的角度?
【发布时间】:2015-01-18 22:56:40
【问题描述】:

因此,这是同一问题的链接,但最佳答案并未完全解释:

Rotate Sprite to Mouse Position

这是我坚持的叉积,因为该链接中的公式只能应用于计算之外的数学。

以计算形式计算叉积的实际公式是什么? 如果您可以将其发布为 C++ 代码,那就太好了。

请记住,我正在寻找 2 个 2D 向量之间的叉积,而不是 3D。

【问题讨论】:

  • It's the cross product that I'm stuck with, since the formula in that link can only be applied in mathematics outside of computing. 不正确。 @Captain他们说精灵所以我假设它是2D的,他们提供的链接应该足以满足他们的目的。
  • 我所看到的无法应用该公式。 sin theta 的第一个实例将为 0,因为我们一开始甚至不知道 theta 是什么。

标签: c++ vector sfml angle cross-product


【解决方案1】:

标题说您对计算两个 2D 向量之间的角度感兴趣,所以这就是我要做的。

如果你看一下http://mathworld.wolfram.com/DotProduct.html,用代码实现是相当简单的。

但是有一个 atan2 函数让这很简单:

double angle = atan2(p2y, p2x) - atan2(p1y, p1x);

【讨论】:

  • 谢谢,我不知道可以使用点积来找到角度。只是为了确定,使用点积时,这两个向量中的任何一个都需要是单位向量吗?
  • @StallMar 不,假设是正常的 XY 坐标系。
  • 哦,这让我有点困惑。这是否意味着我只需在第一个 atan2() 中插入鼠标的 x、y 位置和在第二个 atan2() 中插入播放器的 x、y 位置?还是我还需要 2 个向量?因为之前我有一个从玩家到鼠标位置的向量,以及一个玩家的单位向量。如果没有单位向量,我不知道应该从哪里弹出另一个向量。它只是一个 0,0 的速度向量还是什么?
  • @Stall单位向量是x和y。在计算机屏幕上,它们是像素。在数学中,它们可能是奇怪的生物。是的,只需将它们插入即可。如果您从代码中得到奇怪的结果,请发布一个新问题。希望对您有所帮助。
猜你喜欢
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
  • 2017-03-20
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多