Пример #1
0
        public CoordinateF Rotate(CoordinateF coord)
        {
            // http://content.gpwiki.org/index.php/OpenGL:Tutorials:Using_Quaternions_to_represent_rotation
            var q    = new QuaternionF(coord.Normalise(), 0);
            var temp = q * Conjugate();

            return((this * temp).Vector);
        }
Пример #2
0
        public static MatrixF Rotation(CoordinateF axis, float angle)
        {
            var cos = (float)Math.Cos(-angle);
            var sin = (float)Math.Sin(-angle);
            var t   = 1f - cos;

            axis = axis.Normalise();

            return(new MatrixF(t * axis.X * axis.X + cos, t * axis.X * axis.Y - sin * axis.Z, t * axis.X * axis.Z + sin * axis.Y, 0,
                               t * axis.X * axis.Y + sin * axis.Z, t * axis.Y * axis.Y + cos, t * axis.Y * axis.Z - sin * axis.X, 0,
                               t * axis.X * axis.Z - sin * axis.Y, t * axis.Y * axis.Z + sin * axis.X, t * axis.Z * axis.Z + cos, 0,
                               0, 0, 0, 1));
        }
Пример #3
0
 public static QuaternionF AxisAngle(CoordinateF axis, float angle)
 {
     return(Math.Abs(axis.VectorMagnitude()) < 0.0001
                ? Identity
                : new QuaternionF(axis.Normalise() * (float)Math.Sin(angle / 2), (float)Math.Cos(angle / 2)).Normalise());
 }
Пример #4
0
 public CoordinateF Rotate(CoordinateF coord)
 {
     // http://content.gpwiki.org/index.php/OpenGL:Tutorials:Using_Quaternions_to_represent_rotation
     var q = new QuaternionF(coord.Normalise(), 0);
     var temp = q * Conjugate();
     return (this * temp).Vector;
 }
Пример #5
0
 public static QuaternionF AxisAngle(CoordinateF axis, float angle)
 {
     return Math.Abs(axis.VectorMagnitude()) < 0.0001
                ? Identity
                : new QuaternionF(axis.Normalise() * (float)Math.Sin(angle / 2), (float)Math.Cos(angle / 2)).Normalise();
 }
Пример #6
0
        public static MatrixF Rotation(CoordinateF axis, float angle)
        {
            var cos = (float) Math.Cos(-angle);
            var sin = (float) Math.Sin(-angle);
            var t = 1f - cos;
            axis = axis.Normalise();

            return new MatrixF(t * axis.X * axis.X + cos, t * axis.X * axis.Y - sin * axis.Z, t * axis.X * axis.Z + sin * axis.Y, 0,
                              t * axis.X * axis.Y + sin * axis.Z, t * axis.Y * axis.Y + cos, t * axis.Y * axis.Z - sin * axis.X, 0,
                              t * axis.X * axis.Z - sin * axis.Y, t * axis.Y * axis.Z + sin * axis.X, t * axis.Z * axis.Z + cos, 0,
                              0, 0, 0, 1);
        }