gpt4 book ai didi

c++ - 难以计算圆上一点的角度

转载 作者:行者123 更新时间:2023-11-27 23:11:37 24 4
gpt4 key购买 nike

我在编写函数的几何方面遇到了一些麻烦。我有一个包含各种 Sprite 的类。此容器类需要能够移动、旋转和缩放,同时保持所有子 Sprite 的相对位置、旋转和缩放不变。

我在旋转容器时遇到了问题。 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”变量,我会在圆的圆周周围得到随机点(左下角、右上角、左下角附近、圆的左边、圆的右边等)

感谢阅读本文。对此,我真的非常感激。我完全卡住了。任何帮助都会很棒。

最佳答案

float angle = atan2 (containerY - childY, containerX - childX);
float newAngle = angle + (i / 180.0 * 3.14);

在第一行中,您将获得新的角度。在第二行中,您不只是添加 36 度,而是添加了 i 度,因此在每次迭代中,代码都会向添加一个增加的角度本身已经在增加的角度,因此是零星的行为。

两种不同的解决方案:

1)将第一行替换为

float angle = 3.14159; // allow the loop to add to it

2) 将行中的 i 更改为 36

float newAngle = angle + (36 / 180.0 * 3.14);

不要两者都做!选择一个。

关于c++ - 难以计算圆上一点的角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19937912/

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