private void TestCompoundBodyContainsPoint(CompoundBody compoundBody, double radius)
 {
     foreach (var part in compoundBody.Parts)
     {
         Assert.IsTrue(compoundBody.ContainsPoint(part.Position));
         Assert.IsFalse(compoundBody.ContainsPoint(part.Position.CreatePoint(dx: radius)));
         Assert.IsFalse(compoundBody.ContainsPoint(part.Position.CreatePoint(dy: radius)));
         Assert.IsFalse(compoundBody.ContainsPoint(part.Position.CreatePoint(dz: radius)));
     }
 }
        public void CompoundBody_Of_TwoCuboids_BoundingBox_Correct(double x0, double y0, double z0, double x1, double y1, double z1, double expectedSizeX, double expectedSizeY, double expectedSizeZ)
        {
            var compoundBody = new CompoundBody(new[]
            {
                new RectangularCuboid(new Vector3(x0, y0, z0), 4, 4, 4),
                new RectangularCuboid(new Vector3(x1, y1, z1), 4, 4, 4),
            });
            var boundingBox = compoundBody.GetBoundingBox();

            Assert.AreEqual(expectedSizeX, boundingBox.SizeX, "SizeX");
            Assert.AreEqual(expectedSizeY, boundingBox.SizeY, "SizeY");
            Assert.AreEqual(expectedSizeZ, boundingBox.SizeZ, "SizeZ");
        }
        private static void AssertCompoundBodyWithSinglePart_Contains_IsEquivalentToItsPartContains(Body part)
        {
            var random   = new Random(123123);
            var compound = new CompoundBody(new List <Body> {
                part
            });
            var compound2 = new CompoundBody(new List <Body> {
                compound
            });

            for (int i = 0; i < 1000; i++)
            {
                var p = new Vector3(
                    random.NextDouble() * 20 - 10,
                    random.NextDouble() * 20 - 10,
                    random.NextDouble() * 20 - 10);
                Assert.AreEqual(part.ContainsPoint(p), compound.ContainsPoint(p));
                Assert.AreEqual(part.ContainsPoint(p), compound2.ContainsPoint(p));
            }
        }