glm::vec3 和 epsilon 比较
glm::vec3 and epsilon comparison
我想检查 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)
...
一种更具可读性(也可能更快)的方法可能是使用 glms 向量比较方法:
if (glm::all(glm::lessThan(glm::abs(v), glm::vec3(EPSILON)))) ...
或者可以比较向量的长度(或平方长度,因为这不需要平方根计算)而不是元素:
if (glm::length2(v) < EPSILON * EPSILON) ...
您也可以使用 glm 的 epsilon comparison functions: epsilonEqual。它们在 glm/gtc/epsilon.hpp
中声明
我想检查 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)
...
一种更具可读性(也可能更快)的方法可能是使用 glms 向量比较方法:
if (glm::all(glm::lessThan(glm::abs(v), glm::vec3(EPSILON)))) ...
或者可以比较向量的长度(或平方长度,因为这不需要平方根计算)而不是元素:
if (glm::length2(v) < EPSILON * EPSILON) ...
您也可以使用 glm 的 epsilon comparison functions: epsilonEqual。它们在 glm/gtc/epsilon.hpp
中声明