Circle implements Hyperplane<Sphere2D>, Embedding<Sphere2D, Sphere1D> { public double getOffset(final Point<Sphere2D> point) { return getOffset(((S2Point) point).getVector()); } Circle(final Vector3D pole, final double tolerance);  Circle(final S2Point first, final S2Point second, final double tolerance); private  Circle(final Vector3D pole, final Vector3D x, final Vector3D y,
                   final double tolerance);  Circle(final Circle circle); Circle copySelf(); void reset(final Vector3D newPole); void revertSelf(); Circle getReverse(); Point<Sphere2D> project(Point<Sphere2D> point); double getTolerance(); S1Point toSubSpace(final Point<Sphere2D> point); double getPhase(final Vector3D direction); S2Point toSpace(final Point<Sphere1D> point); Vector3D getPointAt(final double alpha); Vector3D getXAxis(); Vector3D getYAxis(); Vector3D getPole(); Arc getInsideArc(final Circle other); SubCircle wholeHyperplane(); SphericalPolygonsSet wholeSpace(); double getOffset(final Point<Sphere2D> point); double getOffset(final Vector3D direction); boolean sameOrientationAs(final Hyperplane<Sphere2D> other); static Transform<Sphere2D, Sphere1D> getTransform(final Rotation rotation);  }
@Test public void testOffset() { Circle circle = new Circle(Vector3D.PLUS_K, 1.0e-10); Assert.assertEquals(0.0, circle.getOffset(new S2Point(Vector3D.PLUS_I)), 1.0e-10); Assert.assertEquals(0.0, circle.getOffset(new S2Point(Vector3D.MINUS_I)), 1.0e-10); Assert.assertEquals(0.0, circle.getOffset(new S2Point(Vector3D.PLUS_J)), 1.0e-10); Assert.assertEquals(0.0, circle.getOffset(new S2Point(Vector3D.MINUS_J)), 1.0e-10); Assert.assertEquals(-0.5 * FastMath.PI, circle.getOffset(new S2Point(Vector3D.PLUS_K)), 1.0e-10); Assert.assertEquals( 0.5 * FastMath.PI, circle.getOffset(new S2Point(Vector3D.MINUS_K)), 1.0e-10); }