some more quaternion function implementations