You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

68 lines
2.2 KiB

#ifndef IGL_TRIANGLE_TRIANGLE_INTERSECT_H
#define IGL_TRIANGLE_TRIANGLE_INTERSECT_H
#include "igl_inline.h"
#include <Eigen/Core>
namespace igl
{
/// Determine whether two triangles intersect. We consider the `f`th and `g`th
/// triangles in `F` indexing rows of `V` for 3D positions, but the `c`th corner
/// of the `f`th triangle is replaced by `p`. In matlab, this would be
///
/// ```matlab
/// Tf = V(F(f,:),:);
/// Tf(c,:) = p;
/// ```
///
/// and
///
/// ```matlab
/// Tg = V(F(g,:),:);
/// ```
///
/// Triangles can share an edge, but only if it's the one opposite the replaced
/// corner.
///
/// @param[in] V #V by 3 list of vertex positions
/// @param[in] F #F by 3 list of triangle indices into rows of V
/// @param[in] E #E by 2 list of unique undirected edge indices into rows of V
/// @param[in] EMAP #F*3 list of indices into F, mapping each directed edge to
/// unique edge in {1,...,E}
/// @param[in] EF #E by 2 list of edge indices into F
/// @param[in] f index into F of first triangle
/// @param[in] c index into F of corner of first triangle to replace with `p`
/// @param[in] p 3D position to replace corner of first triangle
/// @param[in] g index into F of second triangle
/// @returns true if triangles intersect
///
/// \note This very specialized function should be complemented with the more
/// general functions in igl::tri_tri_intersect (which should be renamed and
/// split into appropriate files). There's a reasonably amount of shared code
/// with igl::copyleft::cgal::remesh_self_intersections too.
///
/// \see edge_flaps, tri_tri_intersect
template <
typename DerivedV,
typename DerivedF,
typename DerivedE,
typename DerivedEMAP,
typename DerivedEF,
typename Derivedp>
IGL_INLINE bool triangle_triangle_intersect(
const Eigen::MatrixBase<DerivedV> & V,
const Eigen::MatrixBase<DerivedF> & F,
const Eigen::MatrixBase<DerivedE> & E,
const Eigen::MatrixBase<DerivedEMAP> & EMAP,
const Eigen::MatrixBase<DerivedEF> & EF,
const int f,
const int c,
const Eigen::MatrixBase<Derivedp> & p,
const int g);
}
#ifndef IGL_STATIC_LIBRARY
# include "triangle_triangle_intersect.cpp"
#endif
#endif