Eigen :: vector :: normalize precision

时间:2014-03-31 17:01:50

标签: c++ eigen point-cloud-library

我正在使用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)。

我怎么能解决这个问题?是否有一些功能可以避免这个简单的问题? 对不起,我是初学者:教我!

1 个答案:

答案 0 :(得分:1)

正如已经指出的那样,错误是由浮点运算引起的。这篇文章

[1]: https://stackoverflow.com/questions/15051367/how-to-compare-vectors-approximately-in-eigen

提供一种很好的方法来解决您的问题。

祝你好运