gpt4 book ai didi

如果一个对象在另一个对象前面,要获取 C++ 点积?

转载 作者:行者123 更新时间:2023-12-05 05:47:38 24 4
gpt4 key购买 nike

我正在尝试使用 Vector2::DotMath::Acos 来确定一个游戏对象是否在另一个游戏对象的前面。凭借我所拥有的,我能够了解第一个对象的前向 vector 是否与第二个 Actor 的前向 vector 成垂直角:

float dotResult = Vector2::Dot(GetForwardDir(), secondActor->GetForward());
float angle = Math::Acos(dotResult);

if(angle <= minAngle)
//do something

GetForwardDir() 是:

return Vector2(Math::Cos(mRotation), -Math::Sin(mRotation));

然而,这并没有说明第二个 Actor 相对于第一个 Actor 的位置。我不认为我在这里了解有关 dotResultAcos 角度的内容。

我如何使用它来判断第一个 Actor 是否在第二个 Actor 前面?

最佳答案

您可能需要一个叉积。点积将为您提供两个 vector 之间夹角的缩放 cos。叉积将为您提供 sin,这在这里更有用。

基本上,制作两个 vector :

  • ActorA 位置 + ActorA.Forward vector
  • ActorA 位置 + (ActorB.position - ActorA.position)

或者,只是

  • ActorA.forward X normalize(ActorB.Position - ActorA.position);

由于您是在 2D 中执行此操作,因此结果将是一个标量。如果结果的符号为正,则 ActorB 在 ActorA 的前向 vector 的 180º(+- 90º)范围内,从 ActorA 的位置开始。

从技术上讲,您正在计算一个正交 vector ,其 Z 分量会告诉您目标是在观察者前面还是后面,但该 vector 的 X 和 Y 分量为零,因为是正交的。

纯粹主义者会说叉积在 2D 中不存在,他们在技术上是正确的,但事实就是如此。

关于如果一个对象在另一个对象前面,要获取 C++ 点积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70966329/

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