public void Collides_Ray3d()
        {
            // Arrange
            var s0 = new Sphere3d(new Vector3d(-2, 0, 0), 3);
            var r0 = new Ray3d(new Vector3d(2, 0, 0), new Vector3d(-1, 0, 0));

            // Act
            var c0 = s0.Collides(r0);

            // Assert
            Assert.AreEqual(new Vector3d(1, 0, 0), c0.HitPoint);
            Assert.AreEqual(new Vector3d(1, 0, 0), c0.Normal);
            Assert.AreEqual(s0, c0.Object0);
            Assert.AreEqual(r0, c0.Object1);
            Assert.AreEqual(0, c0.PenetrationDepth);
        }
        public void Collides_Sphere3d()
        {
            // Arrange
            var s0 = new Sphere3d(new Vector3d(-2, 0, 0), 3);
            var s1 = new Sphere3d(new Vector3d(2, 0, 0), 3);

            // Act
            var c0 = s0.Collides(s1);
            var c1 = s1.Collides(s0);

            // Assert
            Assert.AreEqual(new Vector3d(1, 0, 0), c0.HitPoint);
            Assert.AreEqual(new Vector3d(-1, 0, 0), c0.Normal);
            Assert.AreEqual(s0, c0.Object0);
            Assert.AreEqual(s1, c0.Object1);
            Assert.AreEqual(2, c0.PenetrationDepth);
            Assert.AreEqual(new Vector3d(-1, 0, 0), c1.HitPoint);
            Assert.AreEqual(new Vector3d(1, 0, 0), c1.Normal);
            Assert.AreEqual(s1, c1.Object0);
            Assert.AreEqual(s0, c1.Object1);
            Assert.AreEqual(2, c1.PenetrationDepth);
        }