GtkGL.Quaternion.ToEulerRotation C# (CSharp) Method

ToEulerRotation() public method

public ToEulerRotation ( ) : GtkGL.EulerRotation
return GtkGL.EulerRotation
        public GtkGL.EulerRotation ToEulerRotation()
        {
            double heading;
            double attitude;
            double bank;

            double magnitude = GetMagnitude(); // 1.0 if normalised, otherwise is correction factor
            double test = x*y + z*w;

            if (test > 0.499 * magnitude) { // singularity at north pole
              heading = 2 * Math.Atan2(x,w);
              attitude = Math.PI/2;
              bank = 0;
              Console.WriteLine("Eep!  Singularity at north pole!");
              return new GtkGL.EulerRotation(heading, attitude, bank);
            }

            if (test < -0.499 * magnitude) { // singularity at south pole
              heading = -2 * Math.Atan2(x,w);
              attitude = - Math.PI/2;
              bank = 0;
              Console.WriteLine("Eep!  Singularity at south pole!");
              return new GtkGL.EulerRotation(heading, attitude, bank);
            }

            heading = Math.Atan2(2*y*w-2*x*z , 1 - 2*y*y - 2*z*z);
            attitude = Math.Asin(2*test/magnitude);
            bank = Math.Atan2(2*x*w-2*y*z , 1 - 2*x*x - 2*z*z);

            return new GtkGL.EulerRotation(heading, attitude, bank);
        }