Ejemplo n.º 1
0
        internal static void CalculateSlopeAngle(ref Vector3 vec, out float angle)
        {
            Vector3 up = Vector3.UnitY;
            float   dot;

            Vector3.Dot(ref vec, ref up, out dot);
            angle = (float)Math.Acos(dot);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Solve A * x = b, where b is a column vector. This is more efficient
        /// than computing the inverse in one-shot cases.
        /// </summary>
        /// <param name="b">The b.</param>
        /// <returns></returns>
        public Vector3 Solve33(Vector3 b)
        {
            float det = Vector3.Dot(ex, Vector3.Cross(ey, ez));

            if (det != 0.0f)
            {
                det = 1.0f / det;
            }

            return(new Vector3(det * Vector3.Dot(b, Vector3.Cross(ey, ez)), det * Vector3.Dot(ex, Vector3.Cross(b, ez)), det * Vector3.Dot(ex, Vector3.Cross(ey, b))));
        }
Ejemplo n.º 3
0
        private void ApplyMovement(ref Vector3 cursorVector, ref Vector3 cameraRight, ref Vector3 cameraUp, ref Vector3 vectorToMoveAlong)
        {
            if (vectorToMoveAlong != new Vector3(0, 0, 0))
            {
                // This is old code that I wrote LONG ago---------------------------------------------------
                //int baseScreenX = 0;
                //int baseScreenY = 0;
                //MathFunctions.AbsoluteToWindow(origin.Parent.X, origin.Parent.Y, origin.Parent.Z, ref baseScreenX, ref baseScreenY, SpriteManager.Camera, true);

                //int endScreenX = 0;
                //int endScreenY = 0;
                //MathFunctions.AbsoluteToWindow(
                //    origin.Parent.X + vectorToMoveAlong.X,
                //    origin.Parent.Y + vectorToMoveAlong.Y,
                //    origin.Parent.Z + vectorToMoveAlong.Z,
                //    ref endScreenX, ref endScreenY, SpriteManager.Camera, true);


                //// invert the Y
                //Vector3 moveAlongProjected = new Vector3(endScreenX - baseScreenX, baseScreenY - endScreenY, 0);

                //float worldXChange;
                //float worldYChange;

                //MathFunctions.ScreenToAbsoluteDistance(GuiManager.Cursor.LastScreenX - GuiManager.Cursor.ScreenX,
                //    GuiManager.Cursor.LastScreenY - GuiManager.Cursor.ScreenY,
                //    out worldXChange, out worldYChange, origin.Parent.Z, SpriteManager.Camera);


                //Vector3 rightProjected = worldXChange * moveAlongProjected.X * cameraRight;
                //Vector3 upProjected = worldYChange * moveAlongProjected.Y * cameraUp;

                //Vector3 normalizedProjected = Vector3.Normalize(rightProjected + upProjected);
                // end of old code-----------------------------------------------------------------------------


                changeVector = Vector3.Dot(cursorVector, vectorToMoveAlong) * vectorToMoveAlong;

                if (UpdatePositionsImmediately)
                {
                    origin.Parent.Position += changeVector;
                }
            }
        }
Ejemplo n.º 4
0
 public static float Dot(Vector3 a, Vector3 b)
 {
     return(MonoGameVector3.Dot(a.MonoGameVector, b.MonoGameVector));
 }