34 Eigen::RowVectorXd mins = V.colwise().minCoeff();
35 Eigen::RowVectorXd maxs = V.colwise().maxCoeff();
36 double x_span = maxs(0) - mins(0);
37 double y_span = maxs(1) - mins(1);
38 double z_span = maxs(2) - mins(2);
39 if (x_span > y_span && x_span > z_span) {
41 }
else if (y_span > z_span) {
46 c(0) = (maxs(0) + mins(0)) / 2.0;
47 c(1) = (maxs(1) + mins(1)) / 2.0;
48 c(2) = (maxs(2) + mins(2)) / 2.0;
87 void refine(std::queue<Sphere>& q)
const
89 double c_off_l = m_r / (sqrt(3.0) * 2.0);
90 double new_r = m_r / 2.0;
91 q.emplace(m_c + (c_off_l * Vector3d(-1, -1, -1)), new_r);
92 q.emplace(m_c + (c_off_l * Vector3d(-1, -1, 1)), new_r);
93 q.emplace(m_c + (c_off_l * Vector3d(-1, 1, -1)), new_r);
94 q.emplace(m_c + (c_off_l * Vector3d(-1, 1, 1)), new_r);
95 q.emplace(m_c + (c_off_l * Vector3d(1, -1, -1)), new_r);
96 q.emplace(m_c + (c_off_l * Vector3d(1, -1, 1)), new_r);
97 q.emplace(m_c + (c_off_l * Vector3d(1, 1, -1)), new_r);
98 q.emplace(m_c + (c_off_l * Vector3d(1, 1, 1)), new_r);
108 V.row(0) = mesh.m_vertex_attribute[vs[0]].m_posf;
109 V.row(1) = mesh.m_vertex_attribute[vs[1]].m_posf;
110 V.row(2) = mesh.m_vertex_attribute[vs[2]].m_posf;
111 V.row(3) = mesh.m_vertex_attribute[vs[3]].m_posf;
114 F << 0, 2, 1, 0, 1, 3, 1, 2, 3, 0, 3, 2;
121 igl::barycentric_coordinates(P, V.row(0), V.row(1), V.row(2), V.row(3), L);
122 bool in_tet = (L.array() >= 1e-6).all();
131 igl::point_mesh_squared_distance(P, V, F, sqr_dists, I, C_closest);
132 return (sqr_dists(0) < (m_r * m_r));