在C ++中使用Atan2

时间:2017-04-15 14:30:28

标签: c++

我正在使用atan2使我的对象(Rectangle)在沿着曲线移动时面向法线。但由于某种原因,即使在超出曲线中间之后,物体也总是面向对角线。

这是我使用的公式:

vecdiff = Normals[counterNorm] - player.getPosition(); 
float angle = atan2(vecdiff.y, vecdiff.x)*180/PI + 90;
player.setRotation(angle);

在通过曲线中间后,不确定如何使对象面向左对角

2 个答案:

答案 0 :(得分:1)

自从这是两年前以来,大概您已经解决了您的问题,但是如果没有解决,或者为了后代,我想我有一个答案。我正在处理相同的问题(我认为,@ Walter是正确的,您的问题有点稀疏),但是在Java中,尽管我认为这不会影响该问题。

您的问题是坐标系的中心。您要寻找的角度是曲线所处的圆的中心,但是“ getPosition”正在使用的坐标系在其他位置。如果是Android,则位于绘图区域的左上方。我认为可能是这种情况,因为您的描述听起来像我最初得到的一样。

要做的是找到所需的参考点(该圆的中心),并相应地调整输入给atan2的坐标。

因为我正在处理一个圆,所以我对圆的所有点进行了采样,并使用来计算圆的中点

CentreX = minX + (maxX - minX)/2
CentreY = minY + (maxY - minY)/2

由于您说要沿该路径设置矩形动画,由于atan2中的不连续性,您可能仍然会遇到一些小问题。我还在努力。

答案 1 :(得分:0)

我希望我能正确理解你的问题和问题。从我所看到的你需要保持-180和+180之间的角度:

while (angle < -180){
    angle += 360;
}    
while (angle > 180){
    angle -= 360;
}