void NxQuat::rotate(Point & v) const { NxQuat myInverse; myInverse.x = -x; myInverse.y = -y; myInverse.z = -z; myInverse.w = w; NxQuat left; left.multiply(*this,v); v.x = left.w*myInverse.x + myInverse.w*left.x + left.y*myInverse.z - myInverse.y*left.z; v.y = left.w*myInverse.y + myInverse.w*left.y + left.z*myInverse.x - myInverse.z*left.x; v.z = left.w*myInverse.z + myInverse.w*left.z + left.x*myInverse.y - myInverse.x*left.y; }
void rotate(btVector3 & v) const { NxQuat myInverse; myInverse.x = -x; myInverse.y = -y; myInverse.z = -z; myInverse.w = w; NxQuat left; left.multiply(*this,v); float vx = left.w*myInverse.x + myInverse.w*left.x + left.y*myInverse.z - myInverse.y*left.z; float vy = left.w*myInverse.y + myInverse.w*left.y + left.z*myInverse.x - myInverse.z*left.x; float vz = left.w*myInverse.z + myInverse.w*left.z + left.x*myInverse.y - myInverse.x*left.y; v.setValue(vx, vy, vz); }