コード例 #1
0
ファイル: Quaternion.cs プロジェクト: tcoats/Voodoo
        public static Quaternion SlerpExtraSpins(double t, Quaternion p, Quaternion q, int extraSpins)
        {
            var cos = p.Dot(q);
            var angle = System.Math.Acos(cos);

            if (System.Math.Abs(angle) > 0)
            {
                var sin = System.Math.Sin(angle);
                var phase = System.Math.PI * extraSpins * t;
                var invSin = 1 / sin;
                var coeff0 = System.Math.Sin((1 - t) * angle - phase) * invSin;
                var coeff1 = System.Math.Sin(t * angle + phase) * invSin;
                return p.Mult(coeff0).Add(q.Mult(coeff1));
            }

            return p;
        }
コード例 #2
0
ファイル: Quaternion.cs プロジェクト: tcoats/Voodoo
        public static Quaternion Slerp(double t, Quaternion p, Quaternion q)
        {
            var cos = p.Dot(q);
            var angle = System.Math.Acos(cos);

            if (System.Math.Abs(angle) > 0)
            {
                var sin = System.Math.Sin(angle);
                var invSin = 1 / sin;
                var coeff0 = System.Math.Sin((1 - t) * angle) * invSin;
                var coeff1 = System.Math.Sin(t * angle) * invSin;
                return p.Mult(coeff0).Add(q.Mult(coeff1));
            }

            return p;
        }