public Coordinate Rotate(Coordinate coord) { // http://content.gpwiki.org/index.php/OpenGL:Tutorials:Using_Quaternions_to_represent_rotation var q = new Quaternion(coord.Normalise(), 0); var temp = q * Conjugate(); return((this * temp).Vector); }
public Plane(Coordinate norm, decimal distanceFromOrigin) { Normal = norm.Normalise(); DistanceFromOrigin = distanceFromOrigin; PointOnPlane = Normal * DistanceFromOrigin; A = Normal.X; B = Normal.Y; C = Normal.Z; D = -DistanceFromOrigin; }
public Plane(Coordinate norm, Coordinate pointOnPlane) { Normal = norm.Normalise(); DistanceFromOrigin = Normal.Dot(pointOnPlane); PointOnPlane = pointOnPlane; A = Normal.X; B = Normal.Y; C = Normal.Z; D = -DistanceFromOrigin; }
public Vector(Coordinate normal, decimal distance) : base(0, 0, 0) { Normal = normal.Normalise(); Distance = distance; var temp = Normal * Distance; X = temp.X; Y = temp.Y; Z = temp.Z; }
public static Matrix Rotation(Coordinate axis, decimal angle) { var cos = DMath.Cos(-angle); var sin = DMath.Sin(-angle); var t = 1m - cos; axis = axis.Normalise(); return(new Matrix(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 Quaternion AxisAngle(Coordinate axis, decimal angle) { return(axis.VectorMagnitude() == 0 ? Identity : new Quaternion(axis.Normalise() * DMath.Sin(angle / 2), DMath.Cos(angle / 2)).Normalise()); }