Пример #1
0
        public static void interact(ref List <PhysicsObject> collider)
        {
            float   m0      = collider[0].mass;
            float   m1      = collider[1].mass;
            float   total_M = m0 + m1;
            Point3D Vdiff   = collider[0].velocity - collider[1].velocity;
            Point3D CMdiff  = collider[0].MassCenter - collider[1].MassCenter;
            float   common  = 2 * (Point3D.Dot(Vdiff, CMdiff)) / (Point3D.Dot(CMdiff, CMdiff) * (total_M));

            collider[0].velocity -= (CMdiff) * (common * m1);
            collider[1].velocity -= (-CMdiff) * (common * m0);

            m0     *= collider[0].Radius * collider[0].Radius;
            m1     *= collider[1].Radius * collider[1].Radius;
            total_M = m0 + m1;
            Vdiff   = collider[0].AngularVelocity - collider[1].AngularVelocity;
            //Point3D CMdiff = collider[0].MassCenter - collider[1].MassCenter;
            CMdiff = Point3D.Cross(collider[0].AngularVelocity, collider[1].AngularVelocity);
            common = 2 * (Point3D.Dot(Vdiff, CMdiff)) / (total_M);
            collider[0].AngularVelocity = (CMdiff) * (common * m1);
            collider[1].AngularVelocity = (-CMdiff) * (common * m0);

            collider[0].applyVelocity();
            collider[1].applyVelocity();
        }
Пример #2
0
        static void getInput()
        {
            ConsoleKeyInfo cki;

            do
            {
                cki = Console.ReadKey();
                switch (cki.Key)
                {
                case ConsoleKey.W:
                    camera.Translate(camera.ViewVector.Normalize() * 10);
                    break;

                case ConsoleKey.A:
                    camera.Translate(Point3D.Cross(camera.ViewVector, camera.UpVector).Normalize() * 10);
                    break;

                case ConsoleKey.S:
                    camera.Translate(-camera.ViewVector.Normalize() * 10);
                    break;

                case ConsoleKey.D:
                    camera.Translate(Point3D.Cross(camera.ViewVector, camera.UpVector).Normalize() * -10);
                    break;

                case ConsoleKey.Spacebar:
                    camera.Translate(new Point3D(0, 5, 0));
                    break;

                case ConsoleKey.V:
                    camera.Translate(new Point3D(0, -5, 0));
                    break;

                case ConsoleKey.Q:
                    camera.Rotate(new Point3D(0, 0.05f, 0));
                    break;

                case ConsoleKey.E:
                    camera.Rotate(new Point3D(0, -0.05f, 0));
                    break;

                case ConsoleKey.UpArrow:
                    camera.Rotate(new Point3D(-0.05f, 0, 0));
                    break;

                case ConsoleKey.DownArrow:
                    camera.Rotate(new Point3D(0.05f, 0, 0));
                    break;

                case ConsoleKey.P:
                    shaded = !shaded;
                    break;

                case ConsoleKey.R:
                    camera.Position   = new Point3D(0, 0, 0);
                    camera.ViewVector = new Point3D(0, 0, -1);
                    camera.UpVector   = new Point3D(0, 1, 0);
                    camera.calcWorldtoCameraMatrix();
                    break;

                case ConsoleKey.G:
                    if (PhysicsObject.gravity.Y != PhysicsObject.grav.Y)
                    {
                        PhysicsObject.gravity = PhysicsObject.grav;
                    }
                    else
                    {
                        PhysicsObject.gravity = 0 * PhysicsObject.grav;
                    }
                    break;

                case ConsoleKey.H:
                    if (PhysicsObject.gravity.Y != -PhysicsObject.grav.Y)
                    {
                        PhysicsObject.gravity = -PhysicsObject.grav;
                    }
                    else
                    {
                        PhysicsObject.gravity = 0 * PhysicsObject.grav;
                    }
                    break;

                case ConsoleKey.O:
                    foreach (PhysicsObject ob in scene.getObjects())
                    {
                        ob.Velocity        *= 0.0f;
                        ob.AngularVelocity *= 0.0f;
                    }
                    PhysicsObject.gravity *= 0.0f;
                    break;

                case ConsoleKey.L:
                    Random rand = new Random();
                    foreach (PhysicsObject ob in scene.getObjects())
                    {
                        ob.AngularVelocity = new Point3D(rand.Next(-1, 2) * 0.05f, rand.Next(-1, 2) * 0.05f, rand.Next(-1, 2) * 0.05f);
                    }
                    break;
                }
            } while (cki.Key != ConsoleKey.Escape);
        }