我正在使用Eigen库,v.3.2.1。我正在计算一些飞机的法线。然后我想将它们标准化。我的问题是,对于某些法线,计算的范数不是精确的1.00000,即:
normalA =(0.0000,0.0000,1165.0521)-----> normalA.normalize()=(0.0000,0.0000,1.0000)
normalB =(0.0000,0.0000,1165.0524)-----> normalB.normalize()=(0.0000,0.0000,1.0000)
normalC =(0.0000,0.0000,312.17474)-----> normalC.normalize()=(0.0000,0.0000,1.0000)
normalD =(0.0000,0.0000,2017.9299)-----> normalD.normalize()=(0.0000,0.0000,0.99999994)
我的问题是,当我将normalA与normalD c ++进行比较时,返回false并且我的算法失败,即if(normalA == normalD)。
我怎么能解决这个问题?是否有一些功能可以避免这个简单的问题? 对不起,我是初学者:教我!
答案 0 :(得分:1)
正如已经指出的那样,错误是由浮点运算引起的。这篇文章
[1]: https://stackoverflow.com/questions/15051367/how-to-compare-vectors-approximately-in-eigen
提供一种很好的方法来解决您的问题。
祝你好运