Ray Quaternion::applyRotation(const Ray& ray) const { Quaternion origin = (*this) * Quaternion(ray.m_Origin) * (conjugate()); Quaternion dir = (*this) * Quaternion(ray.m_Dir) * (conjugate()); return Ray(Vector(origin[1], origin[2], origin[3], ray.m_Origin[3]), Vector(dir[1], dir[2], dir[3], ray.m_Dir[3])); }