public void Physics_Verify_Relative_Distance() { RelativeBody s = new RelativeBody(); Vector p1p = Vector.RandVect(); RelativeBody p1 = new RelativeBody(p1p, parentBody: s); Vector p1m1p = Vector.RandVect(); RelativeBody p1m1 = new RelativeBody(p1m1p, parentBody: p1); Vector p2p = Vector.RandVect(); RelativeBody p2 = new RelativeBody(p2p, parentBody: s); Vector p2m1p = Vector.RandVect(); RelativeBody p2m1 = new RelativeBody(p2m1p, parentBody: p2); Physics physics = new Physics(); Vector p1Dp2 = physics.Distance(p1, p2, true); Vector p1Dp2EST = p2p - p1p; Assert.IsTrue(p1Dp2EST == p1Dp2); Vector p1m1Dp2m1 = physics.Distance(p1m1, p2m1, true); Vector p1m1Dp2m2EST = p2m1p + p2p - p1m1p - p1p; Assert.IsTrue(p1m1Dp2m1 == p1m1Dp2m2EST); Vector p1Dp2m1 = physics.Distance(p1, p2m1, true); Vector p1Dp2m1EST = p2m1p + p2p - p1p; Assert.IsTrue(p1Dp2m1 == p1Dp2m1EST); Vector p2m1Dp1 = physics.Distance(p2m1, p1, true); Vector p2m1Dp1EST = p1p - p2m1p - p2p; Assert.IsTrue(p2m1Dp1 == p2m1Dp1EST); }
public void RelativeBody_Verify_Constructor_EmptyVelocity() { double centerMass = 100; double separation = 100; RelativeBody center = new RelativeBody(centerMass); List <int> quads = new List <int>() { 0, 1, 2, 3 }; foreach (int quad in quads) { bool xPos = quad == 1 || quad == 4; bool yPos = quad == 1 || quad == 2; Vector p0 = separation * Vector.RandVect().Normal(); p0.x *= xPos ? 1 : -1; p0.y *= yPos ? 1 : -1; checkRoughlyEqual(separation, p0.Mag()); RelativeBody relBody = new RelativeBody(p0, center, 1); checkRoughlyEqual(Math.Sqrt(centerMass / separation), relBody.v.Mag()); checkRoughlyEqual(0, relBody.p * relBody.v); } }
public void RelativeBody_Verify_ParentDepth() { int layers = 5; RelativeBody center = new RelativeBody(); RelativeBody reference = center; for (int i = 0; i < layers; i++) { reference = new RelativeBody(Vector.RandVect(), parentBody: reference); } Assert.AreEqual(layers, reference.parentDepth()); }
public void RelativeBody_Verify_DistanceFromParent() { for (int layers = 1; layers <= 4; layers++) { RelativeBody center = new RelativeBody(); RelativeBody outer = center; Vector totalSeparation = new Vector(); for (int i = 0; i < layers; i++) { Vector p0 = Vector.RandVect(); totalSeparation += p0; outer = new RelativeBody(p0, parentBody: outer); } Assert.IsTrue(totalSeparation == outer.distanceFromParent(center)); } }
public void RelativeBody_Verify_GetMutualParent() { RelativeBody center = new RelativeBody(); RelativeBody p1 = new RelativeBody(center); RelativeBody p1m1 = new RelativeBody(p1); RelativeBody p2 = new RelativeBody(center); RelativeBody p2m1 = new RelativeBody(center); Assert.AreEqual(center, p1.getMutualParent(p2)); Assert.AreEqual(center, p1.getMutualParent(center)); Assert.AreEqual(center, center.getMutualParent(p1)); Assert.AreEqual(center, p1m1.getMutualParent(p2m1)); Assert.AreEqual(center, p1m1.getMutualParent(p2)); Assert.AreEqual(center, p1.getMutualParent(p2m1)); Assert.AreEqual(p1, p1.getMutualParent(p1m1)); Assert.AreEqual(p1, p1m1.getMutualParent(p1)); }
public void RelativeBody_Verify_Constructors_Basic() { RelativeBody empty = new RelativeBody(); Vector p0 = Vector.RandVect(); double mass = random.NextDouble(); Vector v0 = Vector.RandVect(); double rho = random.NextDouble(); string name = "test"; RelativeBody relBody = new RelativeBody(p0, empty, mass, v0, rho, name); Assert.IsTrue(p0 == relBody.p); Assert.AreEqual(mass, relBody.m); Assert.IsTrue(v0 == relBody.v); Assert.AreEqual(empty, relBody.parent); Assert.AreEqual(rho, relBody.rho); Assert.AreEqual(name, relBody.name); }