Example #1
0
        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);
        }
Example #2
0
        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));
        }