API

The pseudo type :: 2 indicate Tuple{Float64,Float64} or any type T such that ExactPredicates.coord(::T) or Base.Tuple(::T) outputs a Tuple{Float64,Float64}. Similaly, :: 3 indicates Tuple{Float64,Float64,Float64} or any type convertible to it coord or Tuple.

Planar predicates

ExactPredicates.closestMethod
closest(p :: 2, q :: 2, a :: 2) -> Int
  • Return 1 if a is closer to p than to q.
  • Return –1 if a is closer to q than to p.
  • Return 0 is a is equaly close to both.
ExactPredicates.incircleMethod
incircle(a :: 2, b :: 2, c :: 2, p :: 2) -> Int

Assume that a, b and c define a counterclockwise triangle.

  • Return 1 if p is strictly inside the circumcircle of this triangle.
  • Return –1 if p is outside.
  • Return 0 if p is on the circle.

If the triangle is oriented clockwise, the signs are reversed. If a, b and c are collinear, this degenerate to an orientation test.

If two of the four arguments are equal, return 0.

ExactPredicates.intersectorderMethod
intersectorder(a :: 2, b :: 2, pa :: 2, pb :: 2, qa :: 2, qb :: 2) -> Int

Consider the oriented line L defined by a and b, the line P defined by pa and pb and the line Q defined by qa and qb.

Assumes that parallelorder(a, b, pa, pb) and parallelorder(a, b, qa, qb) have the same sign. Otherwise, the result has the opposite sign.

  • return -1 if the intersection of P with L comes before the intersection of Q with L, following the orientation of L.
  • return 1 in the reverse situation
  • return 0 in case of equality or degeneracy.
ExactPredicates.meetMethod
meet(p :: 2, q :: 2, a :: 2, b :: 2)
  • Return 1 if the open line segments (p, q) and (a, b) meet in a single point.
  • Return 0 if the the closed line segments [p, a] and [a, b] meet in one or several points.
  • Return –1 otherwise.
ExactPredicates.orientMethod
orient(p :: 2, q :: 2, r :: 2) -> Int
  • Return 1 if r is on the left of the oriented line defined by p and q.
  • Return –1 if r is on the right.
  • Return 0 if r is on the line or if p == q.
ExactPredicates.parallelorderMethod
parallelorder(a :: 2, b :: 2, p :: 2, q :: 2) -> Int

Consider the oriented line defined by a and b and the parallel lines passing through p and q respectively, with the same orientation.

  • return 1 if the line passing through p is left of the line passing through q.
  • return -1 in the reverse situation.
  • return 0 if a and b are equal or if the parallel lines passing through p and q are equal.

This is a robust version of to orient(b-a, q-p, 0). Note also that orient(a, b, c) == parallelorder(a, b, a, c).

ExactPredicates.rotationMethod
rotation(pts :: AbstractVector)

Gives the number of rotation of the polygonal path defined by the elements of pts.

ExactPredicates.samesideMethod
sameside(p :: 2, a :: 2, b :: 2)

Assume that the three arguments are collinear, on some line L

  • Return 1 if a and b are on the same side of p on L
  • Return -1 if a and b are on different sides
  • Return 0 if a == p or b == p.

Spatial predicates

ExactPredicates.closestMethod
closest(p :: 3, q :: 3, a :: 3) -> Int

Return 1 if a is closer to p than to q. Return –1 if a is closer to q than to p. Return 0 is a is equaly close to both.

ExactPredicates.insphereMethod
insphere(p :: 3, q :: 3, r :: 3, s :: 3, a :: 3)
  • Return 1 if a is inside the circumscribed sphere defined by the four points p, q, r and s.
  • Return –1 if a is outside.
  • Return 0 is a lies on the sphere or if the four points are coplanar.
ExactPredicates.orientMethod
orient(p :: 3, q :: 3, r :: 3, a :: 3) -> Int

Consider the oriented plane on which the triangle pqr is positively oriented.

  • Return 1 if a is below this plane.
  • Return –1 if a is above this plane.
  • Return 0 if a lies on this plane.