Wildmeshing Toolkit
orient.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <wmtk/Types.hpp>
4 
5 namespace wmtk::utils {
6 
7 // template <typename T>
8 // int wmtk_orient3d(
9 // const Eigen::Ref<const Eigen::Vector3<T>>& p0,
10 // const Eigen::Ref<const Eigen::Vector3<T>>& p1,
11 // const Eigen::Ref<const Eigen::Vector3<T>>& p2,
12 // const Eigen::Ref<const Eigen::Vector3<T>>& p3)
13 //{
14 // throw std::runtime_error("unsupported type");
15 // }
16 
17 int wmtk_orient3d(
18  const Eigen::Ref<const Eigen::Vector3<Rational>>& p0,
19  const Eigen::Ref<const Eigen::Vector3<Rational>>& p1,
20  const Eigen::Ref<const Eigen::Vector3<Rational>>& p2,
21  const Eigen::Ref<const Eigen::Vector3<Rational>>& p3);
22 
23 int wmtk_orient3d(
24  const Eigen::Ref<const Eigen::Vector3<double>>& p0,
25  const Eigen::Ref<const Eigen::Vector3<double>>& p1,
26  const Eigen::Ref<const Eigen::Vector3<double>>& p2,
27  const Eigen::Ref<const Eigen::Vector3<double>>& p3);
28 
29 
30 // assumes inputs are column vectors
31 template <typename Derived>
32 int wmtk_orient3d(const Eigen::MatrixBase<Derived>& A)
33 {
34  assert(A.rows() == 3);
35  assert(A.cols() == 4);
36  const auto p0 = A.col(0);
37  const auto p1 = A.col(1);
38  const auto p2 = A.col(2);
39  const auto p3 = A.col(3);
40  return wmtk_orient3d(p0, p1, p2, p3);
41 }
42 
43 
44 // int wmtk_orient2d(
45 // Eigen::Ref<const Eigen::Vector2<T>> p0,
46 // Eigen::Ref<const Eigen::Vector2<T>> p1,
47 // Eigen::Ref<const Eigen::Vector2<T>> p2)
48 //{
49 // throw std::runtime_error("unsupported type");
50 // }
51 
52 int wmtk_orient2d(double p0x, double p0y, double p1x, double p1y, double p2x, double p2y);
53 
54 int wmtk_orient2d(
55  const Eigen::Ref<const Eigen::Vector2<Rational>>& p0,
56  const Eigen::Ref<const Eigen::Vector2<Rational>>& p1,
57  const Eigen::Ref<const Eigen::Vector2<Rational>>& p2);
58 
59 int wmtk_orient2d(
60  const Eigen::Ref<const Eigen::Vector2<double>>& p0,
61  const Eigen::Ref<const Eigen::Vector2<double>>& p1,
62  const Eigen::Ref<const Eigen::Vector2<double>>& p2);
63 
64 int wmtk_orient1d(const Rational& p0, const Rational& p1);
65 
66 int wmtk_orient1d(double p0, double p1);
67 
68 } // namespace wmtk::utils
int wmtk_orient3d(const Eigen::Ref< const Eigen::Vector3< Rational >> &p0, const Eigen::Ref< const Eigen::Vector3< Rational >> &p1, const Eigen::Ref< const Eigen::Vector3< Rational >> &p2, const Eigen::Ref< const Eigen::Vector3< Rational >> &p3)
Definition: orient.cpp:75
int wmtk_orient1d(const Rational &p0, const Rational &p1)
Definition: orient.cpp:267
int wmtk_orient2d(double p0x, double p0y, double p1x, double p1y, double p2x, double p2y)
Definition: orient.cpp:178