我目前正在C++的物理引擎上工作。物理引擎是用来玩沙箱游戏的。我想要建立一个强大的物理引擎,因此,它需要非常精确。
我编写了以下函数:
Vector3D* rotationX(double theta);这个函数将在θ度处围绕x轴旋转一个矢量。我的测试试图将向量<0,1,0>旋转到x轴上,这应该是向量<0,0,1>。输出是以下向量,非常接近于它应该是什么:<0,0.000796327,1>。
我知道地板函数,但我认为这还不够精确,因为我的三维向量类应该能够处理实数;也就是说,不仅仅是整数。
发布于 2019-08-24 21:48:03
您基本上有以下选项:
1.)什么都不做。也许结果对于您的用例来说是足够精确的。注意:当使用浮点操作时,您必须处理一些舍入错误,这是非常正常的。我建议您看看关于浮点算法,每个计算机科学家应该知道什么?。
2.)如果用例涉及比较两个向量是否相等,请确保与某些" epsilon“进行比较,其中epsilon约为10^(-3)。
3.)找出为什么结果如此不精确。使用64位双精度的标准三角函数的旋转通常会使结果比10^(-10)更精确。
在此期间,很明显(请参阅注释),在这种情况下,根本原因是使用3.14作为皮派的近似。当这些标准值在所使用的环境中可用时,使用预定义的常量通常是个好主意。例如,在C++中,可以使用来自<math.h>的常量M_PI (参见这是如此的帖子)。
https://softwareengineering.stackexchange.com/questions/396443
复制相似问题