| 60 | } |
| 61 | |
| 62 | void ObtuseTriangleRemoval::compute_face_angles() { |
| 63 | const size_t num_faces = m_faces.rows(); |
| 64 | m_face_angles.reserve(num_faces * 3); |
| 65 | for (size_t i=0; i<num_faces; i++) { |
| 66 | Vector3F v1 = m_vertices.row(m_faces(i, 0)); |
| 67 | Vector3F v2 = m_vertices.row(m_faces(i, 1)); |
| 68 | Vector3F v3 = m_vertices.row(m_faces(i, 2)); |
| 69 | |
| 70 | m_face_angles.push_back(angle(v2-v1, v3-v1)); |
| 71 | m_face_angles.push_back(angle(v3-v2, v1-v2)); |
| 72 | m_face_angles.push_back(angle(v1-v3, v2-v3)); |
| 73 | } |
| 74 | } |
| 75 | |
| 76 | void ObtuseTriangleRemoval::compute_opposite_vertices() { |
| 77 | const size_t num_faces = m_faces.rows(); |