public void predictContactPosition(double timeStep,
			Vector3d predictedPosition, Quat4d predictedRotation) {
		// Add predicted linear velocity to predicted position
		predictedPosition.set(position);
		Vector3d deltaPosition = new Vector3d(linearVelocity);
		deltaPosition.scale(timeStep);
		predictedPosition.add(deltaPosition);

		// Calculate delta rotation from scratch
		Vector3d predictedAngularVelocity = new Vector3d();
		predictedAngularVelocity.scaleAdd(timeStep, torque, angularVelocity);
		predictedRotation.set(rotation);
		double angle = predictedAngularVelocity.length();
		double sine = Math.sin(angle * timeStep / 2);
		predictedRotation.mul(
				new Quat4d(sine * predictedAngularVelocity.x, sine
						* predictedAngularVelocity.y, sine
						* predictedAngularVelocity.z, Math.cos(angle * timeStep
						/ 2)), predictedRotation);
	}