### Question:
Stereographic extends UnitaryProjection { @Override public Matrix transform(final double[] srcPts, final int srcOff, final double[] dstPts, final int dstOff, final boolean derivate) throws ProjectionException { final double λ = srcPts[srcOff]; final double φ = srcPts[srcOff + 1]; final double sinφ = sin(φ); final double sinλ = sin(λ); final double cosλ = cos(λ); final double ssfn = ssfn(φ, sinφ); if (dstPts != null) { final double χ = 2*atan(ssfn) - PI/2; final double sinχ = sin(χ); final double cosχ = cos(χ); final double cosχ_cosλ = cosχ * cosλ; final double A = 1 + sinχ1*sinχ + cosχ1*cosχ_cosλ; dstPts[dstOff ] = (cosχ * sinλ) / A; dstPts[dstOff+1] = (cosχ1 * sinχ - sinχ1 * cosχ_cosλ) / A; } if (!derivate) { return null; } final double cosφ = cos(φ); final double sd = ssfn - 1/ssfn; final double s2p = 1 + ssfn*ssfn; final double dχφ = 2*dssfn_dφ(φ, sinφ, cosφ) * ssfn; final double A = s2p/ssfn + sd*sinχ1 + 2*cosλ*cosχ1; final double dAλ = -2*cosχ1*sinλ / A; final double dAφ = (2*sinχ1 - sd*cosλ*cosχ1) / (s2p*A); final double d = (cosχ1*sd - 2*cosλ*sinχ1); return new Matrix2( 2*(cosλ - sinλ*dAλ) / A, -sinλ*dχφ * (sd/s2p + 2*dAφ) / A, (2*sinλ*sinχ1 - dAλ*d) / A, dχφ * ((2*cosχ1 + sinχ1*cosλ*sd)/s2p - dAφ*d) / A); } protected  Stereographic(final OperationMethod method, final Parameters parameters);   Stereographic(final OperationMethod method, final Parameters parameters, double latitudeOfOrigin); static MathTransform2D create(final OperationMethod descriptor,
                                         final ParameterValueGroup values); @Override Matrix transform(final double[] srcPts, final int srcOff,
                            final double[] dstPts, final int dstOff,
                            final boolean derivate); @Override boolean equals(final Object object, final ComparisonMode mode);  }### Answer:
@Test @Ignore public void testAssertions() throws TransformException { final ParameterValueGroup values = PARAMETERS.createValue(); values.parameter("semi_major").setValue(SPHERE_RADIUS); values.parameter("semi_minor").setValue(SPHERE_RADIUS); final Stereographic.Spherical sphere = null; final double[] source = new double[2]; final double[] expected = new double[2]; final double[] actual = new double[2]; final double[] errors = new double[180]; for (int ivf=200; ivf<400; ivf+=10) { values.parameter("semi_minor").setValue(SPHERE_RADIUS * (1 - 1 / (double) ivf)); final Stereographic projection = null; for (int x=0; x<180; x++) { double error = 0; for (int y=-90; y<90; y+=5) { source[0] = toRadians(x); source[1] = toRadians(y); sphere.transform(source, 0, expected, 0, 1); projection.transform(source, 0, actual, 0, 1); final double e = hypot(expected[0]-actual[0], expected[1]-actual[1]); if (e > error) { error = e; } } if (error > errors[x]) { errors[x] = error; } } } }