首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算旋转哪个方向?

如何计算旋转哪个方向?
EN

Stack Overflow用户
提问于 2014-01-09 06:09:35
回答 3查看 372关注 0票数 0

我正在尝试在我的DirectX应用程序中实现一个简单的AI系统。我试图让我的Ai旋转并朝向我想要的方向,我设法做到了,但我不知道如何让它确定如何旋转到给定的方向(即它应该向左旋转还是向右旋转?)

这是我得到的代码,它计算出它需要旋转的角度,以面对它给定的方向:

代码语言:javascript
复制
    D3DXVECTOR3 incident = destination - position;
    float top = D3DXVec3Dot(&incident, &forwardVec);
    float bottom =  sqrt((incident.x * incident.x) + (incident.y * incident.y) + (incident.z * incident.z)) *
                    sqrt((forwardVec.x * forwardVec.x) + (forwardVec.y * forwardVec.y) + (forwardVec.z * forwardVec.z));
    float remainingAngle = acos(top/bottom) * 180.0f / PI;

forwardVec是人工智能当前所面临的方向的D3DXVECTOR3

EN

回答 3

Stack Overflow用户

发布于 2014-01-09 06:16:32

点积规则只告诉你最短的角度(总是小于180!),而不是走哪条路。你有办法从D3DXVECTOR (即极轴形状的东西)中得到方向角吗?如果是,则可以减去(所需角度)-(当前角度),如果在-180到180之间,则逆时针;否则,顺时针。

我有一种感觉,叉积也可能给出一种方法,但我必须坐下来拿一张纸来解决它。

票数 1
EN

Stack Overflow用户

发布于 2014-01-09 06:13:11

让我们假设前面的直线是0,并且您正在以顺时针方式计算度数。

如果你需要转到180岁或更少,那么你就向右转。

如果你需要转弯超过180度,你必须左转。这个转弯是360度的左转弯。

我希望这能回答你的问题。

票数 0
EN

Stack Overflow用户

发布于 2014-12-05 20:06:57

两个归一化向量之间的角度:

代码语言:javascript
复制
double GetAng (const D3DXVECTOR3& Xi_V1, const D3DXVECTOR3& Xi_V2)
{
      D3DXVECTOR3 l_Axis;
      D3DXVec3Cross(&l_Axis, &Xi_V1, &Xi_V2);
      return atan2(D3DXVec3Length(&l_Axis), D3DXVec3Dot(&Xi_V1, &Xi_V2));
}

返回的角度在-PI和PI之间,表示从v1到v2的最短角度旋转。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21007645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档