From 347f6268b922012055fbe77bb4ce9962cbdeb18e Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Sun, 6 Jun 2010 13:07:50 -0600 Subject: New dmnsn_bounding_box_is_infinite() predicate. --- libdimension/dimension/geometry.h | 7 +++++++ libdimension/geometry.c | 9 ++------- libdimension/prtree.c | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/libdimension/dimension/geometry.h b/libdimension/dimension/geometry.h index effac7c..98fc913 100644 --- a/libdimension/dimension/geometry.h +++ b/libdimension/dimension/geometry.h @@ -300,4 +300,11 @@ dmnsn_bounding_box_contains(dmnsn_bounding_box box, dmnsn_vector p) && (p.x <= box.max.x && p.y <= box.max.y && p.z <= box.max.z); } +/* Return whether `box' is infinite */ +DMNSN_INLINE bool +dmnsn_bounding_box_is_infinite(dmnsn_bounding_box box) +{ + return box.min.x == -INFINITY; +} + #endif /* DIMENSION_GEOMETRY_H */ diff --git a/libdimension/geometry.c b/libdimension/geometry.c index 8edb2c3..5d14953 100644 --- a/libdimension/geometry.c +++ b/libdimension/geometry.c @@ -362,14 +362,9 @@ dmnsn_transform_vector(dmnsn_matrix lhs, dmnsn_vector rhs) dmnsn_bounding_box dmnsn_transform_bounding_box(dmnsn_matrix trans, dmnsn_bounding_box box) { - /* Infinite bounding box support */ - if (isinf(box.min.x) || isinf(box.min.y) || isinf(box.min.z) - || isinf(box.max.x) || isinf(box.max.y) || isinf(box.max.z)) - { - box.min = dmnsn_new_vector(-INFINITY, -INFINITY, -INFINITY); - box.max = dmnsn_new_vector(INFINITY, INFINITY, INFINITY); + /* Infinite/zero bounding box support */ + if (isinf(box.min.x)) return box; - } dmnsn_vector corner; dmnsn_bounding_box ret; diff --git a/libdimension/prtree.c b/libdimension/prtree.c index d36e54a..15bc997 100644 --- a/libdimension/prtree.c +++ b/libdimension/prtree.c @@ -451,7 +451,7 @@ dmnsn_split_unbounded(dmnsn_list *objects) dmnsn_object *object; dmnsn_list_get(i, &object); - if (isinf(object->bounding_box.min.x)) { + if (dmnsn_bounding_box_is_infinite(object->bounding_box)) { dmnsn_list_iterator *next = dmnsn_list_next(i); dmnsn_list_iterator_remove(objects, i); dmnsn_list_iterator_insert(unbounded, NULL, i); -- cgit v1.2.3