]> git.tdb.fi Git - libs/math.git/commitdiff
Add a missing condition to BoundingBox subtraction
authorMikko Rasa <tdb@tdb.fi>
Mon, 23 Jan 2023 11:48:55 +0000 (13:48 +0200)
committerMikko Rasa <tdb@tdb.fi>
Mon, 23 Jan 2023 11:48:55 +0000 (13:48 +0200)
If the positive box extends to both sides of the negative box, the result
should be equal to the positive box.

source/geometry/boundingbox.h
tests/boundingbox.cpp

index 4ae29354d2ce2b69b3c48478bf0928bb4ad35129..ae9da2baac7b8f562eafc5632f5ae5bc86032f8c 100644 (file)
@@ -97,7 +97,7 @@ inline BoundingBox<T, D> operator&(const BoundingBox<T, D> &bb1, const BoundingB
                result_max = bb1.get_maximum_point();
                if(bb2.get_minimum_coordinate(uncovered_axis)<bb1.get_minimum_coordinate(uncovered_axis))
                        result_min[uncovered_axis] = bb2.get_maximum_coordinate(uncovered_axis);
-               else
+               else if(bb2.get_maximum_coordinate(uncovered_axis)>bb1.get_maximum_coordinate(uncovered_axis))
                        result_max[uncovered_axis] = bb2.get_minimum_coordinate(uncovered_axis);
        }
        else
index d5e011bd98d66c4940ed34adf43b9fa4dfd407af..16989d6261caf900ab84e8ac2affc8933b464699 100644 (file)
@@ -83,6 +83,11 @@ void BoundingBoxTests::subtraction()
        bboxs = bbox1&~bbox4;
        EXPECT(bboxs.is_empty());
 
+       BoundingBox3 bbox5(Vector3(-3, -3, -1), Vector3(3, 3, 1));
+       bboxs = bbox4&~bbox5;
+       EXPECT_EQUAL(bboxs.get_minimum_point(), bbox4.get_minimum_point());
+       EXPECT_EQUAL(bboxs.get_maximum_point(), bbox4.get_maximum_point());
+
        bboxs = bbox1&~BoundingBox3();
        EXPECT_EQUAL(bboxs.get_minimum_point(), bbox1.get_minimum_point());
        EXPECT_EQUAL(bboxs.get_maximum_point(), bbox1.get_maximum_point());