Pangolin
Header-only C++20 plane computational geometry library
Loading...
Searching...
No Matches
orientation.hpp File Reference

Exact low-level orientation and incircle predicates. More...

#include "shape/emptyshape.hpp"
#include <compare>
#include <type_traits>
#include <vector>

Go to the source code of this file.

Namespaces

namespace  pgl

Functions

template<class ANumber, class ALabel, class BNumber, class BLabel, class CNumber, class CLabel>
constexpr auto pgl::orientationDeterminant (const Point< ANumber, ALabel > &a, const Point< BNumber, BLabel > &b, const Point< CNumber, CLabel > &c)
 Returns the signed orientation determinant of three points.
template<class ANumber, class ALabel, class BNumber, class BLabel, class CNumber, class CLabel>
constexpr std::partial_ordering pgl::orientationSign (const Point< ANumber, ALabel > &a, const Point< BNumber, BLabel > &b, const Point< CNumber, CLabel > &c)
 Classifies the orientation of three points.
template<class UNumber, class ULabel, class VNumber, class VLabel>
constexpr std::partial_ordering pgl::crossSign (const Point< UNumber, ULabel > &u, const Point< VNumber, VLabel > &v)
 Classifies the turn from one vector to another.
template<class ANumber, class ALabel, class BNumber, class BLabel, class PNumber, class PLabel, class QNumber, class QLabel>
constexpr std::partial_ordering pgl::crossSign (const Point< ANumber, ALabel > &a, const Point< BNumber, BLabel > &b, const Point< PNumber, PLabel > &p, const Point< QNumber, QLabel > &q)
 Classifies the turn from the direction a -> b to the direction p -> q.
template<class ANumber, class ALabel, class BNumber, class BLabel, class CNumber, class CLabel>
constexpr bool pgl::collinear (const Point< ANumber, ALabel > &a, const Point< BNumber, BLabel > &b, const Point< CNumber, CLabel > &c)
 Tests whether three points are collinear.
template<class ANumber, class ALabel, class BNumber, class BLabel>
constexpr bool pgl::sameDirection (const Point< ANumber, ALabel > &a1, const Point< ANumber, ALabel > &a2, const Point< BNumber, BLabel > &b1, const Point< BNumber, BLabel > &b2)
 Tests whether the directions a1 -> a2 and b1 -> b2 are parallel.
template<class ANumber, class ALabel, class BNumber, class BLabel>
constexpr std::partial_ordering pgl::dotSign (const Point< ANumber, ALabel > &a, const Point< BNumber, BLabel > &b)
 Tells if the angle between two vectors is acute, right, or obtuse.
template<class ANumber, class ALabel, class BNumber, class BLabel, class PNumber, class PLabel, class QNumber, class QLabel>
constexpr std::partial_ordering pgl::dotSign (const Point< ANumber, ALabel > &a, const Point< BNumber, BLabel > &b, const Point< PNumber, PLabel > &p, const Point< QNumber, QLabel > &q)
 Tells if the angle between the directions a -> b and p -> q is acute, right, or obtuse.
template<class ANumber, class ALabel, class BNumber, class BLabel, class CNumber, class CLabel, class DNumber, class DLabel>
constexpr auto pgl::inCircleDeterminant (const Point< ANumber, ALabel > &a, const Point< BNumber, BLabel > &b, const Point< CNumber, CLabel > &c, const Point< DNumber, DLabel > &d)
 Returns the signed in-circle determinant of a query point.
template<class ANumber, class ALabel, class BNumber, class BLabel, class CNumber, class CLabel, class DNumber, class DLabel>
constexpr std::partial_ordering pgl::inCircleSign (const Point< ANumber, ALabel > &a, const Point< BNumber, BLabel > &b, const Point< CNumber, CLabel > &c, const Point< DNumber, DLabel > &d)
 Classifies a point with respect to the circumcircle of three others.

Detailed Description

Exact low-level orientation and incircle predicates.

These are the primitive signed tests that the rest of the library builds on for collinearity, side tests, and robust ordering decisions.