X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmodel%2Fgeometry.hpp;fp=src%2Fmodel%2Fgeometry.hpp;h=248ced30e0b77941e60b77d7ee8138f8ddf1fb75;hb=4c34ddd7eeaa3cb71fc90bf76a0cd395682add66;hp=0bc17c162b73afb2e457866ca5c0d98617f59865;hpb=f0a20986c573c4df1eb1212333489252c4b30efa;p=blank.git diff --git a/src/model/geometry.hpp b/src/model/geometry.hpp index 0bc17c1..248ced3 100644 --- a/src/model/geometry.hpp +++ b/src/model/geometry.hpp @@ -20,29 +20,38 @@ constexpr float PI_0p5_inv = 1.0f / PI_0p5; constexpr float DEG_RAD_FACTOR = PI / 180.0f; constexpr float RAD_DEG_FACTOR = 180.0f / PI; -constexpr float deg2rad(float d) { +constexpr float deg2rad(float d) noexcept { return d * DEG_RAD_FACTOR; } -constexpr float rad2deg(float r) { +constexpr float rad2deg(float r) noexcept { return r * RAD_DEG_FACTOR; } +inline float length_squared(const glm::vec3 &v) noexcept { + return dot(v, v); +} + +inline float distance_squared(const glm::vec3 &a, const glm::vec3 &b) noexcept { + return length_squared(a - b); +} + + template -inline bool iszero(const T &v) { - return dot(v, v) < std::numeric_limits::epsilon(); +inline bool iszero(const T &v) noexcept { + return length_squared(v) < std::numeric_limits::epsilon(); } template -T manhattan_distance(const glm::tvec3 &a, const glm::tvec3 &b) { +T manhattan_distance(const glm::tvec3 &a, const glm::tvec3 &b) noexcept { glm::tvec3 diff(abs(a - b)); return diff.x + diff.y + diff.z; } template -T manhattan_radius(const glm::tvec3 &v) { +T manhattan_radius(const glm::tvec3 &v) noexcept { glm::tvec3 a(abs(v)); return std::max(a.x, std::max(a.y, a.z)); }