diff options
Diffstat (limited to 'libdimension/dimension/geometry.h')
-rw-r--r-- | libdimension/dimension/geometry.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/libdimension/dimension/geometry.h b/libdimension/dimension/geometry.h index 80da735..38afa3b 100644 --- a/libdimension/dimension/geometry.h +++ b/libdimension/dimension/geometry.h @@ -445,3 +445,39 @@ dmnsn_bounding_box_is_infinite(dmnsn_bounding_box box) { return box.min.x == -INFINITY; } + +/** Return whether a vector contains any NaN components. */ +DMNSN_INLINE bool +dmnsn_vector_isnan(dmnsn_vector v) +{ + return isnan(v.x) || isnan(v.y) || isnan(v.z); +} + +/** Return whether a matrix contains any NaN components. */ +DMNSN_INLINE bool +dmnsn_matrix_isnan(dmnsn_matrix m) +{ + size_t i, j; + for (i = 0; i < 3; ++i) { + for (j = 0; j < 4; ++j) { + if (isnan(m.n[i][j])) { + return true; + } + } + } + return false; +} + +/** Return whether a line contains any NaN entries. */ +DMNSN_INLINE bool +dmnsn_line_isnan(dmnsn_line l) +{ + return dmnsn_vector_isnan(l.x0) || dmnsn_vector_isnan(l.n); +} + +/** Return whether a bounding box has any NaN components. */ +DMNSN_INLINE bool +dmnsn_bounding_box_isnan(dmnsn_bounding_box box) +{ + return dmnsn_vector_isnan(box.min) || dmnsn_vector_isnan(box.max); +} |