From bb789476b69e115fd436be34fc6d6aada976f535 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sat, 9 Aug 2014 21:21:57 -0700 Subject: [PATCH] New basics gets the remainder of the stuff from old basics EPSILON, MAX_DISTANCE, NearZeor, NearlyEqual, TooFar. --- src/basics/basics.hh | 56 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/basics/basics.hh b/src/basics/basics.hh index ba66078..d6b91e1 100644 --- a/src/basics/basics.hh +++ b/src/basics/basics.hh @@ -9,10 +9,66 @@ #ifndef __BASICS_BASICS_HH__ #define __BASICS_BASICS_HH__ +#include + #include "basics/color.hh" #include "basics/matrix.hh" #include "basics/ray.hh" #include "basics/types.hh" #include "basics/vector.hh" + +/** + * A very small constant. If a value is between EPSILON and 0.0, it is + * considered to be zero. + */ +const Double EPSILON = 1.0e-10; + +/** + * The maximum distance a ray can travel. This is the maximum value t can be. + */ +const Double MAX_DISTANCE = 1.0e7; + +/** + * Determine if the value is "close enough" to zero. Takes the absolute value + * and compares it to `EPSILON`. + * + * @see EPSILON + * + * @param [in] value The value to check + * @returns `true` if the value is close enough to zero + */ +template +inline bool +NearZero(const T value) +{ + return std::fabs(value) < EPSILON; +} + + +/** + * Determine if two values are "close enough" to be considered equal. Subtracts + * one from the other and checks if the result is near zero. + * + * @see NearZero + * + * @param [in] left The left parameter + * @param [in] right The right parameter + * @returns `true` if the values are close enough to be equal + */ +template +inline bool +NearlyEqual(const T left, + const T right) +{ + return NearZero(left - right); +} + + +inline bool +TooFar(const Double& value) +{ + return value > MAX_DISTANCE; +} + #endif /* __BASICS_BASICS_HH__ */