我正在编写的函数的几何形状有点问题。我有一个包含各种精灵的类。这个容器类需要能够移动、旋转和缩放,同时保持所有子精灵的相对位置、旋转和缩放不变。
旋转容器时遇到问题。atan2 计算的角度似乎是随机的。我编写了一个简单的控制台应用程序,它执行并输出我正在使用的函数背后的数学运算(很难正确显示代码,因为它依赖于各种外部资源)。我这样做是为了确保它不是导致我的错误的代码的另一部分。但我的结果与控制台应用程序相同。这是代码(它是独立的。您可以轻松运行它)
#include<math.h>
#include<iostream>
using namespace std;
int main()
{
float containerX = 0;
float containerY = 0;
float childX = 10;
float childY = 0;
for(int i = 0; i <= 360; i += 36)
{
float radius = sqrt(pow(containerX - childX, 2) + pow(containerY - childY, 2));
float angle = atan2 (containerY - childY, containerX - childX);
float newAngle = angle + (i / 180.0 * 3.14);
childX = containerX + radius * cos(newAngle);
childY = containerY + radius * sin(newAngle);
std::cout << "New angle: " << newAngle * 180.0 / 3.14 << " New Position: " << childX << ", " << childY << std::endl;
}
while(1!=2) {} // This line is so I can read the console output
return 0;
}
我的输出如下:
New angle: 180.091 New Position: -10, -8.74228e-007
New angle: 36 New Position: 8.09204, 5.87528
New angle: -72.0913 New Position: 3.08108, -9.51351
New angle: 216 New Position: -8.10139, -5.86238
New angle: 179.909 New Position: -9.99995, 0.0318542
New angle: 179.817 New Position: -9.99988, 0.0477804
New angle: 215.726 New Position: -8.12931, -5.8236
New angle: 287.635 New Position: 3.00522, -9.53775
New angle: 395.543 New Position: 8.15704, 5.78469
New angle: 179.27 New Position: -9.99897, 0.143339
New angle: 359.178 New Position: 9.99846, -0.175189
我知道这个问题与我用 atan2 计算角度有关,因为如果我只是将 i 转换为弧度(我以 36 为增量迭代 0 度和 360 度)并将其传递给 cos 和 sin,我得到积分依次绕圈。如果我使用我的“newAngle”变量,我会在圆的圆周上得到随机点(左下角、右下角、左下角附近、圆的左边、圆的右边等)
感谢您阅读本文。对此,我真的非常感激。我完全被困住了。任何帮助都会很棒。