public void TestAABB()
        {
            Vector[]        vecs            = new Vector[] { Vector.Create(-1.0, -1.0), Vector.Create(1.0, 1.0), Vector.Create(2.0, 2.0), Vector.Create(3.0, 3.0) };
            KdTree <Vector> tree            = new KdTree <Vector>(vecs, new Accelerators.Subdivision.SubdivisionPolicyConnector(1));
            BoundingVolumeSearch <Vector> s = new BoundingVolumeSearch <Vector>(tree.Root);

            List <Vector> found =
                new List <Vector>(s.FindInsideBoundingVolume(new AABB(Vector.Create(0.5, 0.5), Vector.Create(2.5, 2.5))));

            Assert.AreEqual(found.Count, 2);
            Assert.IsTrue(VectorComparison.Equal(vecs[1], found[0]));
            Assert.IsTrue(VectorComparison.Equal(vecs[2], found[1]));

            found = new List <Vector>(
                s.FindInsideBoundingVolume(
                    new AABB(Vector.Create(0.0, 0.0), Vector.Create(0.5, 0.5))
                    )
                );

            Assert.IsEmpty(found);

            found = new List <Vector>(
                s.FindInsideBoundingVolume(
                    new AABB(Vector.Create(-2.0, -2.0), Vector.Create(4.5, 4.5))
                    )
                );

            Assert.AreEqual(4, found.Count);
            Assert.IsTrue(VectorComparison.Equal(vecs[0], found[0]));
            Assert.IsTrue(VectorComparison.Equal(vecs[1], found[1]));
            Assert.IsTrue(VectorComparison.Equal(vecs[2], found[2]));
            Assert.IsTrue(VectorComparison.Equal(vecs[3], found[3]));
        }
        public void TestBallContainsNone()
        {
            Ball b = new Ball(Vector.Create(-0.5, -0.5), 0.1);

            BoundingVolumeSearch <Vector> s = new BoundingVolumeSearch <Vector>(_tree.Root);
            List <Vector> result            = new List <Vector>(s.FindInsideBoundingVolume(b));

            Assert.AreEqual(0, result.Count);
        }
        public void TestBallLimit()
        {
            Ball b = new Ball(Vector.Create(1.0, 4.0), 1.0);

            BoundingVolumeSearch <Vector> s = new BoundingVolumeSearch <Vector>(_tree.Root);

            s.CountLimit = 2;
            List <Vector> result = new List <Vector>(s.FindInsideBoundingVolume(b));

            Assert.AreEqual(2, result.Count);
        }
        public void TestBallContainsSome()
        {
            Ball b = new Ball(Vector.Create(1.0, 4.0), 1.0);

            BoundingVolumeSearch <Vector> s = new BoundingVolumeSearch <Vector>(_tree.Root);
            List <Vector> result            = new List <Vector>(s.FindInsideBoundingVolume(b));

            Assert.AreEqual(3, result.Count);
            Assert.IsTrue(VectorComparison.Equal(result[0], _vecs[4]));
            Assert.IsTrue(VectorComparison.Equal(result[1], _vecs[5]));
            Assert.IsTrue(VectorComparison.Equal(result[2], _vecs[6]));
        }
        public void TestBallContainsAll()
        {
            // Ball encapsulating entire region
            IVector diag     = _tree.Root.InternalBounds.Diagonal;
            IVector center   = _tree.Root.InternalBounds.Center;
            double  len_half = VectorReductions.L2Norm(diag) * 0.5;
            Ball    b        = new Ball(center, len_half);

            BoundingVolumeSearch <Vector> s = new BoundingVolumeSearch <Vector>(_tree.Root);
            List <Vector> result            = new List <Vector>(s.FindInsideBoundingVolume(b));

            Assert.AreEqual(7, result.Count);
        }