public void TestConstructor() { var pA = new Particle { Mass = 1 }; var pB = new Particle { Mass = 1 }; var rope = new ParticleRope(10, 0.5, pA, pB); Assert.AreEqual(10, rope.MaxLength); Assert.AreEqual(pA, rope.ParticleA); Assert.AreEqual(pB, rope.ParticleB); Assert.AreEqual(0.5, rope.Restitution); }
public void TestGetEnumerator() { var pA = new Particle { Mass = 1 }; var pB = new Particle { Mass = 1 }; var rope = new ParticleRope(10, 0.5, pA, pB); var contacts = new List <ParticleContact>(); contacts.AddRange(rope); Assert.AreEqual(0, contacts.Count, "长度未变化时不产生任何碰撞"); pB.Position = new Vector2D(20, 0); foreach (var contact in rope) { Assert.AreEqual(10, contact.Penetration); Assert.AreEqual(new Vector2D(1, 0), contact.ContactNormal); } }
/// <summary> /// 在物理世界创建一条质体绳索 /// 该绳索由两个质体(质点)组成,两个质体的距离被限定在指定的数值内 /// </summary> /// <param name="world"></param> /// <param name="maxLength"></param> /// <param name="restitution"></param> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public static ParticleRope CreateRope(this World world, double maxLength, double restitution, Particle a, Particle b) { var rope = new ParticleRope(maxLength, restitution, a, b); return(world.CreateContact(rope)); }