Class S2EdgeUtil.EdgeCrosser

java.lang.Object
com.google.common.geometry.S2EdgeUtil.EdgeCrosser
Enclosing class:
S2EdgeUtil

public static final class S2EdgeUtil.EdgeCrosser extends Object
Used to efficiently test a fixed edge AB against an edge chain. To use it, initialize with the edge AB, and call robustCrossing(S2Point, S2Point) or edgeOrVertexCrossing(S2Point, S2Point) with each edge of the chain.

This class is not thread-safe.

  • Constructor Details

    • EdgeCrosser

      public EdgeCrosser()
      Constructs an uninitialized edge crosser. Invoke init(S2Point, S2Point) before calling the other methods.
    • EdgeCrosser

      public EdgeCrosser(S2Point a, S2Point b)
      Convenience constructor that calls init() with the given fixed edge AB.
    • EdgeCrosser

      public EdgeCrosser(S2Point a, S2Point b, S2Point c)
      AB is the given fixed edge, and C is the first vertex of the vertex chain. Equivalent to using the two-arg constructor and calling restartAt(c).
  • Method Details

    • init

      public void init(S2Point a, S2Point b)
    • restartAt

      public void restartAt(S2Point c)
      Call this method when your chain 'jumps' to a new place.
    • robustCrossing

      public int robustCrossing(S2Point d)
      This method is equivalent to calling the robustCrossing(S2Point) function (defined below) on the edges AB and CD. It returns +1 if there is a crossing, -1 if there is no crossing, and 0 if two points from different edges are the same. Returns 0 or -1 if either edge is degenerate. As a side effect, it saves vertex D to be used as the next vertex C.
    • robustCrossing

      public int robustCrossing(S2Point c, S2Point d)
      As robustCrossing(S2Point), but restarts at c if that is not the previous endpoint.
    • edgeOrVertexCrossing

      public boolean edgeOrVertexCrossing(S2Point d)
      This method is equivalent to the edgeOrVertexCrossing(S2Point) method defined below. It is similar to robustCrossing(S2Point), but handles cases where two vertices are identical in a way that makes it easy to implement point-in-polygon containment tests.
    • edgeOrVertexCrossing

      public boolean edgeOrVertexCrossing(S2Point c, S2Point d)
      As edgeOrVertexCrossing(S2Point), but restarts at c if that is not the previous endpoint.