Vector toEuler() { double sqw = W * W; double sqx = X * X; double sqy = Y * Y; double sqz = Z * Z; var ret = new Vector { X = (float)Math.Atan2((2.0*(X*Y + Z*W)), (sqx - sqy - sqz + sqw)), Y = (float)Math.Asin(-2.0*(X*Z - Y*W)/(sqx + sqy + sqz + sqw)), Z = (float)Math.Atan2(2.0*(Y*Z + X*W), (-sqx - sqy + sqz + sqw)) }; return ret; }
private Quaternion(double w, Vector vec) { W = w; X = vec.X; Y = vec.Y; Z = vec.Z; }