| 95 | } |
| 96 | |
| 97 | void PointLocator::init_barycentric_solvers() { |
| 98 | const size_t dim = m_mesh->get_dim(); |
| 99 | |
| 100 | const size_t num_elements = m_elements.size() / m_vertex_per_element; |
| 101 | m_barycentric_solvers = MatrixF::Zero(num_elements*dim, dim); |
| 102 | m_last_vertices = MatrixF::Zero(num_elements, dim); |
| 103 | |
| 104 | for (size_t i=0; i<num_elements; i++) { |
| 105 | VectorI elem = m_elements.segment(i*m_vertex_per_element, m_vertex_per_element); |
| 106 | VectorF last_v = m_mesh->get_vertex(elem[dim]); |
| 107 | MatrixFr M(dim, dim); |
| 108 | for (size_t j=0; j<dim; j++) { |
| 109 | M.row(j) = m_mesh->get_vertex(elem[j]) - last_v; |
| 110 | } |
| 111 | m_barycentric_solvers.block(i*dim, 0, dim, dim) = M.transpose().inverse(); |
| 112 | m_last_vertices.row(i) = last_v; |
| 113 | } |
| 114 | } |
| 115 | |
| 116 | void PointLocator::init_hash_grid() { |
| 117 | const size_t dim = m_mesh->get_dim(); |
nothing calls this directly
no test coverage detected