cdm/src/main/java/ucar/unidata/geoloc/projection/Sinusoidal.java
public List<ProjectionPoint> getMapEdgeInterceptsAtX(double x0) {
        List<ProjectionPoint> mapEdgeIntercepts = new LinkedList<>();
        if (projToLatLon(x0, falseNorthing) == INVALID) {  // The line {@code x = x0} does not intersect the map.
            return mapEdgeIntercepts;  // Empty list.
        }

        double x0natural = x0 - falseEasting;
        double limitLon_r = (x0natural < 0) ? -PI : +PI;
        double deltaLon_r = limitLon_r - Math.toRadians(centMeridian);

        // This formula comes from solving 30-1 for phi, and then plugging it into 30-2. See Snyder, p 247.
        double minY = -earthRadius * Math.acos(x0natural / (earthRadius * deltaLon_r));
        double maxY = +earthRadius * Math.acos(x0natural / (earthRadius * deltaLon_r));

        mapEdgeIntercepts.add(new ProjectionPointImpl(x0, minY + falseNorthing));
        mapEdgeIntercepts.add(new ProjectionPointImpl(x0, maxY + falseNorthing));
        return mapEdgeIntercepts;
    }
public List<ProjectionPoint> getMapEdgeInterceptsAtX(double x0) {
        List<ProjectionPoint> mapEdgeIntercepts = new LinkedList<>();
        if (projToLatLon(x0, falseNorthing) == INVALID) {  // The line {@code x = x0} does not intersect the map.
            return mapEdgeIntercepts;  // Empty list.
        }

        double x0natural = x0 - falseEasting;
        double limitLon_r = (x0natural < 0) ? -PI : +PI;
        double deltaLon_r = limitLon_r - Math.toRadians(centMeridian);

        // This formula comes from solving 30-1 for phi, and then plugging it into 30-2. See Snyder, p 247.
        double minY = -earthRadius * Math.acos(x0natural / (earthRadius * deltaLon_r));
        double maxY = +earthRadius * Math.acos(x0natural / (earthRadius * deltaLon_r));

        mapEdgeIntercepts.add(new ProjectionPointImpl(x0, minY + falseNorthing));
        mapEdgeIntercepts.add(new ProjectionPointImpl(x0, maxY + falseNorthing));
        return mapEdgeIntercepts;
    }
public List < ProjectionPoint > getMapEdgeInterceptsAtX ( double x0 ) { List < ProjectionPoint > mapEdgeIntercepts = new LinkedList <> ( ) ; if ( projToLatLon ( x0 , falseNorthing ) == INVALID ) { // The line {@code x = x0} does not intersect the map.
 return mapEdgeIntercepts ; // Empty list.
 } double x0natural = x0 - falseEasting ; double limitLon_r = ( x0natural < 0 ) ? - PI : + PI ; double deltaLon_r = limitLon_r - Math . toRadians ( centMeridian ) ; // This formula comes from solving 30-1 for phi, and then plugging it into 30-2. See Snyder, p 247.
 double minY = - earthRadius * Math . acos ( x0natural / ( earthRadius * deltaLon_r ) ) ; double maxY = + earthRadius * Math . acos ( x0natural / ( earthRadius * deltaLon_r ) ) ; mapEdgeIntercepts . add ( new ProjectionPointImpl ( x0 , minY + falseNorthing ) ) ; mapEdgeIntercepts . add ( new ProjectionPointImpl ( x0 , maxY + falseNorthing ) ) ; return mapEdgeIntercepts ; }
Returns the points at which the line {@code x = x0} intersects the map edge.

@param x0  defines a line that may intersect the map edge, in projection coordinates.
@return    the points at which the line {@code x = x0} intersects the map edge. May be empty.
Returns the points at which the line { @code x = x0 } intersects the map edge .