cdm/src/main/java/ucar/unidata/geoloc/projection/LambertConformal.java
private void precalculate() {
    if (Math.abs(lat0) > PI_OVER_2) {
      throw new IllegalArgumentException("LambertConformal lat0 outside range (-90,90)");
    }
    if (Math.abs(par1) >= 90.0) {
      throw new IllegalArgumentException("LambertConformal abs(par1) >= 90");
    }
    if (Math.abs(par2) >= 90.0) {
      throw new IllegalArgumentException("LambertConformal abs(par2) >= 90");
    }

    if (Math.abs(par1 - 90.0) < TOLERANCE) {
      throw new IllegalArgumentException("LambertConformal par1 = 90");
    }
    if (Math.abs(par1 + 90.0) < TOLERANCE) {
      throw new IllegalArgumentException("LambertConformal par1 = -90");
    }
    if (Math.abs(par2 - 90.0) < TOLERANCE) {
      throw new IllegalArgumentException("LambertConformal par2 = 90");
    }
    if (Math.abs(par2 + 90.0) < TOLERANCE) {
      throw new IllegalArgumentException("LambertConformal par2 = -90");
    }

    double par1r = Math.toRadians(this.par1);
    double par2r = Math.toRadians(this.par2);

    double t1 = Math.tan(Math.PI / 4 + par1r / 2);
    double t2 = Math.tan(Math.PI / 4 + par2r / 2);

    if (Math.abs(par2 - par1) < TOLERANCE) {  // single parallel
      n = Math.sin(par1r);
    } else {
      n = Math.log(Math.cos(par1r) / Math.cos(par2r))
              / Math.log(t2 / t1);
    }

    double t1n = Math.pow(t1, n);
    F = Math.cos(par1r) * t1n / n;
    earthRadiusTimesF = earth_radius * F;

    double t0n = Math.pow(Math.tan(Math.PI / 4 + lat0 / 2), n);
    rho = earthRadiusTimesF / t0n;

    lon0Degrees = Math.toDegrees(lon0);
    // need to know the pole value for crossSeam
    //Point2D pt = latLonToProj( 90.0, 0.0);
    //maxY = pt.getY();
    //System.out.println("LC = " +pt);
  }
private void precalculate() {
    if (Math.abs(lat0) > PI_OVER_2) {
      throw new IllegalArgumentException("LambertConformal lat0 outside range (-90,90)");
    }
    if (Math.abs(par1) >= 90.0) {
      throw new IllegalArgumentException("LambertConformal abs(par1) >= 90");
    }
    if (Math.abs(par2) >= 90.0) {
      throw new IllegalArgumentException("LambertConformal abs(par2) >= 90");
    }

    if (Math.abs(par1 - 90.0) < TOLERANCE) {
      throw new IllegalArgumentException("LambertConformal par1 = 90");
    }
    if (Math.abs(par1 + 90.0) < TOLERANCE) {
      throw new IllegalArgumentException("LambertConformal par1 = -90");
    }
    if (Math.abs(par2 - 90.0) < TOLERANCE) {
      throw new IllegalArgumentException("LambertConformal par2 = 90");
    }
    if (Math.abs(par2 + 90.0) < TOLERANCE) {
      throw new IllegalArgumentException("LambertConformal par2 = -90");
    }

    double par1r = Math.toRadians(this.par1);
    double par2r = Math.toRadians(this.par2);

    double t1 = Math.tan(Math.PI / 4 + par1r / 2);
    double t2 = Math.tan(Math.PI / 4 + par2r / 2);

    if (Math.abs(par2 - par1) < TOLERANCE) {  // single parallel
      n = Math.sin(par1r);
    } else {
      n = Math.log(Math.cos(par1r) / Math.cos(par2r))
              / Math.log(t2 / t1);
    }

    double t1n = Math.pow(t1, n);
    F = Math.cos(par1r) * t1n / n;
    earthRadiusTimesF = earth_radius * F;

    double t0n = Math.pow(Math.tan(Math.PI / 4 + lat0 / 2), n);
    rho = earthRadiusTimesF / t0n;

    lon0Degrees = Math.toDegrees(lon0);
    // need to know the pole value for crossSeam
    //Point2D pt = latLonToProj( 90.0, 0.0);
    //maxY = pt.getY();
    //System.out.println("LC = " +pt);
  }
private void precalculate ( ) { if ( Math . abs ( lat0 ) > PI_OVER_2 ) { throw new IllegalArgumentException ( "LambertConformal lat0 outside range (-90,90)" ) ; } if ( Math . abs ( par1 ) >= 90.0 ) { throw new IllegalArgumentException ( "LambertConformal abs(par1) >= 90" ) ; } if ( Math . abs ( par2 ) >= 90.0 ) { throw new IllegalArgumentException ( "LambertConformal abs(par2) >= 90" ) ; } if ( Math . abs ( par1 - 90.0 ) < TOLERANCE ) { throw new IllegalArgumentException ( "LambertConformal par1 = 90" ) ; } if ( Math . abs ( par1 + 90.0 ) < TOLERANCE ) { throw new IllegalArgumentException ( "LambertConformal par1 = -90" ) ; } if ( Math . abs ( par2 - 90.0 ) < TOLERANCE ) { throw new IllegalArgumentException ( "LambertConformal par2 = 90" ) ; } if ( Math . abs ( par2 + 90.0 ) < TOLERANCE ) { throw new IllegalArgumentException ( "LambertConformal par2 = -90" ) ; } double par1r = Math . toRadians ( this . par1 ) ; double par2r = Math . toRadians ( this . par2 ) ; double t1 = Math . tan ( Math . PI / 4 + par1r / 2 ) ; double t2 = Math . tan ( Math . PI / 4 + par2r / 2 ) ; if ( Math . abs ( par2 - par1 ) < TOLERANCE ) { // single parallel
 n = Math . sin ( par1r ) ; } else { n = Math . log ( Math . cos ( par1r ) / Math . cos ( par2r ) ) / Math . log ( t2 / t1 ) ; } double t1n = Math . pow ( t1 , n ) ; F = Math . cos ( par1r ) * t1n / n ; earthRadiusTimesF = earth_radius * F ; double t0n = Math . pow ( Math . tan ( Math . PI / 4 + lat0 / 2 ) , n ) ; rho = earthRadiusTimesF / t0n ; lon0Degrees = Math . toDegrees ( lon0 ) ; // need to know the pole value for crossSeam
 //Point2D pt = latLonToProj( 90.0, 0.0);
 //maxY = pt.getY();
 //System.out.println("LC = " +pt);
 }
Precalculate some stuff
Precalculate some stuff