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); }
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)); }
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()); }