34 const Eigen::Ref<const Eigen::Vector2d> &a,
35 const Eigen::Ref<const Eigen::Vector2d> &b,
36 const Eigen::Ref<const Eigen::Vector2d> &c,
37 const Eigen::Ref<const Eigen::Vector2d> &d,
38 Eigen::Ref<Eigen::Vector2d> & intersectionPoint);
53 const Eigen::Vector3d &pointOnPlane,
54 const Eigen::Vector3d &planeNormal,
55 const Eigen::Vector3d &firstPointSegment,
56 const Eigen::Vector3d &secondPointSegment,
57 Eigen::Vector3d & intersectionPoint);
70template <
typename VECTORA_T,
typename VECTORB_T,
typename VECTORC_T>
74 const VECTORC_T &toCheck);
87template <
typename Derived>
89 const Eigen::MatrixBase<Derived> &a,
90 const Eigen::MatrixBase<Derived> &b,
91 const Eigen::MatrixBase<Derived> &c);
104template <
typename Derived>
106 const Eigen::MatrixBase<Derived> &a,
107 const Eigen::MatrixBase<Derived> &b,
108 const Eigen::MatrixBase<Derived> &c,
109 const Eigen::MatrixBase<Derived> &d);
118 const Eigen::VectorXd &a,
119 const Eigen::VectorXd &b,
120 const Eigen::VectorXd &c);
124 const Eigen::Vector3d &a,
125 const Eigen::Vector3d &b,
126 const Eigen::Vector3d &c,
127 const Eigen::Vector3d &d);
131 const Eigen::Vector3d &vector,
132 const int indexDimensionToRemove);
142template <
class Derived>
144 const Eigen::MatrixBase<Derived> &sidelengths,
145 const Eigen::MatrixBase<Derived> ¢er,
146 const Eigen::MatrixBase<Derived> &testPoint);
150template <
typename VECTORA_T,
typename VECTORB_T,
typename VECTORC_T>
154 const VECTORC_T &toCheck)
169template <
typename Derived>
171 const Eigen::MatrixBase<Derived> &a,
172 const Eigen::MatrixBase<Derived> &b,
173 const Eigen::MatrixBase<Derived> &c)
177 double triangleOutline = (b - a).norm() + (c - b).norm() + (a - c).norm();
184template <
class Derived>
186 const Eigen::MatrixBase<Derived> &a,
187 const Eigen::MatrixBase<Derived> &b,
188 const Eigen::MatrixBase<Derived> &c,
189 const Eigen::MatrixBase<Derived> &d)
197template <
class Derived>
199 const Eigen::MatrixBase<Derived> &sidelengths,
200 const Eigen::MatrixBase<Derived> ¢er,
201 const Eigen::MatrixBase<Derived> &testPoint)
203 int dim = sidelengths.size();
204 Eigen::VectorXd toCenter = testPoint - center;
205 toCenter = toCenter.cwiseAbs();
208 bool touching =
false;
209 for (
int i = 0; i < dim; i++) {
210 diff = 0.5 * sidelengths(i) - toCenter(i);
#define PRECICE_ASSERT(...)
bool between(const VECTORA_T &a, const VECTORB_T &b, const VECTORC_T &toCheck)
Determines, if a point lies on the line segment defined by a, b.
double triangleArea(const Eigen::VectorXd &a, const Eigen::VectorXd &b, const Eigen::VectorXd &c)
Computes the signed area of a triangle in 2D.
double tetraVolume(const Eigen::Vector3d &a, const Eigen::Vector3d &b, const Eigen::Vector3d &c, const Eigen::Vector3d &d)
Computes the (unsigned) area of a triangle in 3D.
Eigen::Vector2d projectVector(const Eigen::Vector3d &vector, int indexDimensionToRemove)
Projects a 3D vector to a 2D one by removing one dimension.
int containedInHyperrectangle(const Eigen::MatrixBase< Derived > &sidelengths, const Eigen::MatrixBase< Derived > ¢er, const Eigen::MatrixBase< Derived > &testPoint)
Tests, if a vertex is contained in a hyperrectangle.
bool lineIntersection(const Eigen::Ref< const Eigen::Vector2d > &a, const Eigen::Ref< const Eigen::Vector2d > &b, const Eigen::Ref< const Eigen::Vector2d > &c, const Eigen::Ref< const Eigen::Vector2d > &d, Eigen::Ref< Eigen::Vector2d > &intersectionPoint)
Determines the intersection point of two lines, if one exists.
static bool parallel(const Eigen::MatrixBase< Derived > &a, const Eigen::MatrixBase< Derived > &b, const Eigen::MatrixBase< Derived > &c, const Eigen::MatrixBase< Derived > &d)
Determines, if two lines are parallel to each other.
ResultConstants segmentPlaneIntersection(const Eigen::Vector3d &pointOnPlane, const Eigen::Vector3d &planeNormal, const Eigen::Vector3d &firstPointSegment, const Eigen::Vector3d &secondPointSegment, Eigen::Vector3d &intersectionPoint)
Determines the intersection point of a segment with a plane in 3D.
bool collinear(const Eigen::MatrixBase< Derived > &a, const Eigen::MatrixBase< Derived > &b, const Eigen::MatrixBase< Derived > &c)
Determines, if three points are collinear (on one line)
ConvexityResult isConvexQuad(std::array< Eigen::VectorXd, 4 > coords)
constexpr bool equals(const Eigen::MatrixBase< DerivedA > &A, const Eigen::MatrixBase< DerivedB > &B, double tolerance=NUMERICAL_ZERO_DIFFERENCE)
Compares two Eigen::MatrixBase for equality up to tolerance.
std::enable_if< std::is_arithmetic< Scalar >::value, bool >::type greaterEquals(Scalar A, Scalar B, Scalar tolerance=NUMERICAL_ZERO_DIFFERENCE)
std::enable_if< std::is_arithmetic< Scalar >::value, bool >::type greater(Scalar A, Scalar B, Scalar tolerance=NUMERICAL_ZERO_DIFFERENCE)
Main namespace of the precice library.
std::array< int, 4 > vertexOrder