// This file is part of libigl, a simple c++ geometry processing library. // // Copyright (C) 2016 Michael Rabinovich // // This Source Code Form is subject to the terms of the Mozilla Public License // v. 2.0. If a copy of the MPL was not distributed with this file, You can // obtain one at http://mozilla.org/MPL/2.0/. #include "flipped_triangles_ids.h" #include template IGL_INLINE Eigen::VectorXi flipped_triangles_ids( const Eigen::PlainObjectBase & V, const Eigen::PlainObjectBase & F ) { assert(V.cols() == 2); std::vector flip_idx; for (int i = 0; i < F.rows(); i++) { Eigen::Vector2d v1_n = V.row(F(i,0)); Eigen::Vector2d v2_n = V.row(F(i,1)); Eigen::Vector2d v3_n = V.row(F(i,2)); Eigen::MatrixXd T2_Homo(3,3); T2_Homo.col(0) << v1_n(0),v1_n(1),1; T2_Homo.col(1) << v2_n(0),v2_n(1),1; T2_Homo.col(2) << v3_n(0),v3_n(1),1; double det = T2_Homo.determinant(); assert (det == det); if (det < 0) { flip_idx.push_back(i); } } Eigen::VectorXi ret(flip_idx.size()); for (unsigned i=0; i