Exemplo n.º 1
0
        void quaternion_t::compute_rotation(const vector_t& v1, const vector_t& v2)
        {
            PRX_ASSERT(v1.get_dim() == v2.get_dim());

            vector_t v(3);
            double w;

            v.cross_product(v1,v2);
            w = sqrt(v1.squared_norm() * v2.squared_norm()) + v1.dot_product(v2);
            set(v[0],v[1],v[2],w);

            normalize();
        }
        void quaternion_t::compute_rotation(const vector_t& v1, const vector_t& v2)
        {
            PRX_ASSERT(v1.get_dim() == v2.get_dim());

            vector_t v(3);
            double w;
            //    v.cross_product(v1,v2);
            //
            //    if ( fabs(v1.norm()-1) <= PRX_ZERO_CHECK && fabs(v2.norm()-1) <= PRX_ZERO_CHECK ) {
            //        w = 1 + v1.dot_product(v2);
            //    } else {
            //        w = sqrt(v1.squared_norm() * v2.squared_norm()) + v1.dot_product(v2);
            //    }
            //
            //    set(v[0],v[1],v[2],w);

            v.cross_product(v1,v2);
            w = sqrt(v1.squared_norm() * v2.squared_norm()) + v1.dot_product(v2);
            set(v[0],v[1],v[2],w);
            //    PRX_DEBUG_S("q: " << *this);
            normalize();
            //    PRX_DEBUG_S("AFTER q: " << *this);
        }