| 159 | } |
| 160 | |
| 161 | Vector3F ObtuseTriangleRemoval::project(size_t ext_idx) { |
| 162 | size_t f_idx = ext_idx / 3; |
| 163 | size_t opp_idx = m_opp_vertices[ext_idx]; |
| 164 | Edge& e = m_edges[ext_idx]; |
| 165 | Vector3F v1 = m_vertices.row(e.get_ori_data()[0]); |
| 166 | Vector3F v2 = m_vertices.row(e.get_ori_data()[1]); |
| 167 | Vector3F v3 = m_vertices.row(m_faces(f_idx, opp_idx)); |
| 168 | |
| 169 | Vector3F e1 = v2 - v1; |
| 170 | Vector3F e2 = v3 - v1; |
| 171 | Vector3F offset = e1.dot(e2) / e1.squaredNorm() * e1; |
| 172 | Vector3F proj = v1 + offset; |
| 173 | return proj; |
| 174 | } |
| 175 | |
| 176 | void ObtuseTriangleRemoval::finalize_geometry() { |
| 177 | finalize_vertices(); |