Wildmeshing Toolkit
Loading...
Searching...
No Matches
orient.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <wmtk/Types.hpp>
4
5namespace 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
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
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
31template <typename Derived>
32int 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
52int wmtk_orient2d(double p0x, double p0y, double p1x, double p1y, double p2x, double p2y);
53
54int 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
59int 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
64int wmtk_orient1d(const Rational& p0, const Rational& p1);
65
66int 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