【发布时间】:2015-12-05 09:42:31
【问题描述】:
我想检查 glm::vec3 是否等于零向量 glm::vec3(0,0,0)。
直到现在我还在写
if(v == glm::vec3(0,0,0))
...
但后来我了解了 epsilon,所以我的问题是,是否有比像这样显式比较更快(更易读)的方法来执行此检查:
if(abs(v.x) < EPSILON && abs(v.y) < EPSILON && abs(v.z) < EPSILON)
...
【问题讨论】:
-
如果你想使用 epsilon 比较 取决于你是否真的想测试向量是否为 0 或者你想检查一个向量接近 0。进行正确的 epsilon 比较 并非易事,而且在不知道确切用例的情况下无法告诉您。
-
我想检查向量的所有元素是否都等于0。
-
如果您想检查它们是否完全正确 0,那么您不需要进行 epsilon 测试。
-
但是如果 v.x 设置为 0,那么它实际上可能在内存中接近于 0,然后 ==0 测试可能会失败。没有?
-
如果您使用
v.x = 0.0f;,那么v.x正好为零,因为零可以表示为精确值。