gpt4 book ai didi

c++ - 自定义 Vector2D 类中的浮点错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:46:19 25 4
gpt4 key购买 nike

我为我正在制作的游戏编写了自定义 Vector2D 类。据我所知,我的旋转函数在数学上是正确的,但我在测试时得到了奇怪的输出。

很明显,我在使用 float 时做错了什么,但我不知道如何诊断和解决这些问题。

以下是我的测试代码的所有相关函数:

float Vector2D::Magnitude() const
{
return sqrtf((X * X) + (Y * Y));
}

float Vector2D::Angle() const
{
float rad = atanf(Y / X);
float degrees = rad * 180.0f / PI;
return degrees;
}

void Vector2D::Rotate(float degrees)
{
float angle = degrees * PI / 180.0f;

float s = sinf(angle);
float c = cosf(angle);

float newX = (c * X) - (s * Y);
float newY = (s * X) + (c * Y);

X = newX;
Y = newY;
}

还有我的测试设置:

Vector2D c(1.0f, 1.0f);

for (int i = 0; i < 8; i++)
{
c.Rotate(90);

std::cout << "Angle: " << c.Angle() << " Magnitude: " << c.Magnitude() << " X: " << c.X << " Y: " << c.Y << std::endl;
}

1.0f, 1.0f 作为 X 和 Y 给出了这个输出:

Angle: -45 Magnitude: 1.41421 X: -1 Y: 1
Angle: 45 Magnitude: 1.41421 X: -1 Y: -1
Angle: -45 Magnitude: 1.41421 X: 1 Y: -1
Angle: 45 Magnitude: 1.41421 X: 1 Y: 1
Angle: -45 Magnitude: 1.41421 X: -1 Y: 1
Angle: 45 Magnitude: 1.41421 X: -1 Y: -1
Angle: -45 Magnitude: 1.41421 X: 1 Y: -1
Angle: 45 Magnitude: 1.41421 X: 1 Y: 1

当用 1.0f、0.0f 作为 X 和 Y 测试上面的代码时,这是我得到的输出:

Angle: -90 Magnitude: 1 X: -4.37114e-08 Y: 1
Angle: 5.00896e-06 Magnitude: 1 X: -1 Y: -8.74228e-08
Angle: -90 Magnitude: 1 X: 1.31134e-07 Y: -1
Angle: 1.00179e-05 Magnitude: 1 X: 1 Y: 1.74846e-07
Angle: -90 Magnitude: 1 X: -2.18557e-07 Y: 1
Angle: 1.50269e-05 Magnitude: 1 X: -1 Y: -2.62268e-07
Angle: -90 Magnitude: 1 X: 3.0598e-07 Y: -1
Angle: 2.00358e-05 Magnitude: 1 X: 1 Y: 3.49691e-07

这两个都不对。我对 1.0f、1.0f 的预期值:

Angle: 90 Magnitude: 1 X: 1 Y: 1
Angle: 180 Magnitude: 1 X: -1 Y: -1
Angle: 270 Magnitude: 1 X: 1 Y: -1
Angle: 360 (or 0): Magnitude: 1 X: 1 Y: 1

循环的下 4 次迭代依此类推。

对于 1.0f、0.0f,输出应该是:

角度:90 大小:1 X:0 Y:1角度:180 大小:1 X:-1 Y:0角度:270 大小:1 X:0 Y:-1角度:360(或0) 大小:1 X: 1 Y: 0

如果有人愿意解释我做错了什么,我将不胜感激。

最佳答案

没关系,问题不在我的数学中(除了 atan2f 与 atan 问题)。问题是我如何在代码的另一个区域使用旋转。

感谢您的帮助,我应该检查我的代码破坏 Vector 类是否正确。

关于c++ - 自定义 Vector2D 类中的浮点错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51347184/

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