16 assert(
mesh().top_cell_dimension() == 2);
41 Eigen::Vector3d p0 = accessor.const_vector_attribute(v0);
42 Eigen::Vector3d p1 = accessor.const_vector_attribute(v1);
43 Eigen::Vector3d p2 = accessor.const_vector_attribute(v2);
44 Eigen::Vector3d p3 = accessor.const_vector_attribute(v3);
46 const double h0 = ((p0 - p2).cross(p0 - p3)).norm() / (p2 - p3).norm();
47 const double h1 = ((p1 - p2).cross(p1 - p3)).norm() / (p2 - p3).norm();
48 const double h2 = ((p2 - p0).cross(p2 - p1)).norm() / (p0 - p1).norm();
49 const double h3 = ((p3 - p0).cross(p3 - p1)).norm() / (p0 - p1).norm();
51 const double min_old = std::min(h2, h3);
52 const double min_new = std::min(h0, h1);
54 if (((p0 - p1).norm() * h2 / 2) < 1e-10 || ((p0 - p1).norm() * h3 / 2) < 1e-10) {
55 if (((p2 - p3).norm() * h0 / 2) > 1e-10 && ((p2 - p3).norm() * h1 / 2) > 1e-10) {
60 return min_old < min_new;