Beispiel #1
0
        /* Refleja la velocidad de la pelota sobre el eje y que se le pasa. */
        public void Deflect(Vector yaxis)
        {
            /* Fabrico la matriz de rotación. */
            Vector   xaxis = yaxis.NewNegativeRotation(Math.PI / 2);
            Matrix2D basis = new Matrix2D(xaxis, yaxis);

            /* Expreso la velocidad de la pelota en las nuevas coordenadas. */
            Vector projVel = basis.Inverse().TimesVector(this.velocity);

            /* Cambio la coordenada y. */
            projVel.Y *= -1;

            /* Reescribo en la base canónica. */
            this.velocity = basis.TimesVector(projVel);
        }
Beispiel #2
0
        /* Aplica a la pelota la colisión con este bumper. */
        private void ApplyCollision(Ball ball, double friction)
        {
            /* Creamos la base en que expresaremos la velocidad de la bola. */
            Vector   yaxis      = Vector.Subtract(ball.Position, this.position);
            Vector   xaxis      = yaxis.NewNegativeRotation(Math.PI / 2);
            Matrix2D baseMatrix = new Matrix2D(xaxis, yaxis);

            /* Expresamos la velocidad en la nueva base. */
            Vector newVel = baseMatrix.Inverse().TimesVector(ball.Velocity);

            /* Cambiamos de signo la coordenada y de la nueva velocidad. */
            //newVel.X *= friction;
            newVel.Y *= -1;

            /* Reescribimos el vector velocidad en la base canónica
             * y se lo asignamos a la bola. */
            ball.Velocity = baseMatrix.TimesVector(newVel);
        }