我正在使用atan2使我的对象(Rectangle)在沿着曲线移动时面向法线。但由于某种原因,即使在超出曲线中间之后,物体也总是面向对角线。
这是我使用的公式:
vecdiff = Normals[counterNorm] - player.getPosition();
float angle = atan2(vecdiff.y, vecdiff.x)*180/PI + 90;
player.setRotation(angle);
在通过曲线中间后,不确定如何使对象面向左对角
答案 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;
}