bool slerp_face(T t, face_ptr fi, face_ptr fj){ coordinate_type Ni = fi->normal(); coordinate_type Nj = fj->normal(); coordinate_type ceni = fi->calculate_center(); coordinate_type cenj = fj->calculate_center(); face_vertex_ptr itb = fi->fbegin(), ite = fi->fend(); face_vertex_ptr jtb = fj->fbegin(), jte = fj->fend(); bool at_head = false; while (!at_head) { at_head = itb == ite; coordinate_type ci = itb->coordinate()-ceni; coordinate_type cip = itb->next()->coordinate()-ceni; coordinate_type cj = rotate_to_plane(Ni,Nj,cenj,jtb->coordinate()); //mOrient.push_back(ci + ceni); //mOrient.push_back(cj + ceni); coordinate_type cij = blend(t,ci,Ni,cj); itb->coordinate() = cij + ceni; // coordinate_type ci = rotate_to_xy(Ni,ceni,itb->coordinate()); // coordinate_type cip = rotate_to_xy(Ni,ceni,itb->next()->coordinate()); // coordinate_type cj = rotate_to_xy(Nj,cenj,jtb->coordinate()); // coordinate_type cjp = rotate_to_xy(Nj,cenj,jtb->next()->coordinate()); // // mOrient.push_back(ci + ceni); // mOrient.push_back(cj + ceni); // // coordinate_type cij = blend(t,ci,Eigen::Matrix<T,4,1>(0,0,1),cj); // itb->coordinate() = rotate_from_xy(Ni,ceni,cij); itb = itb->next(); jtb = jtb->prev(); } fi->update_normal(); fi->update_center(); cout << endl; cout << "---------" << endl; return true; }