119 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
Object.defineProperty(exports, '__esModule', { value: true });
 | 
						|
 | 
						|
var sexagesimal = require('./sexagesimal.cjs');
 | 
						|
 | 
						|
/**
 | 
						|
 * @copyright 2013 Sonia Keys
 | 
						|
 * @copyright 2016 commenthol
 | 
						|
 * @license MIT
 | 
						|
 * @module refraction
 | 
						|
 */
 | 
						|
const { sin, tan } = Math;
 | 
						|
const D2R = Math.PI / 180;
 | 
						|
 | 
						|
const gt15true1 = new sexagesimal["default"].Angle(false, 0, 0, 58.294).rad();
 | 
						|
const gt15true2 = new sexagesimal["default"].Angle(false, 0, 0, 0.0668).rad();
 | 
						|
const gt15app1 = new sexagesimal["default"].Angle(false, 0, 0, 58.276).rad();
 | 
						|
const gt15app2 = new sexagesimal["default"].Angle(false, 0, 0, 0.0824).rad();
 | 
						|
 | 
						|
/**
 | 
						|
 * gt15True returns refraction for obtaining true altitude when altitude
 | 
						|
 * is greater than 15 degrees (about 0.26 radians.)
 | 
						|
 *
 | 
						|
 * h0 must be a measured apparent altitude of a celestial body in radians.
 | 
						|
 *
 | 
						|
 * Result is refraction to be subtracted from h0 to obtain the true altitude
 | 
						|
 * of the body.  Unit is radians.
 | 
						|
 */
 | 
						|
function gt15True (h0) { // (h0 float64)  float64
 | 
						|
  // (16.1) p. 105
 | 
						|
  const t = tan(Math.PI / 2 - h0);
 | 
						|
  return gt15true1 * t - gt15true2 * t * t * t
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * gt15Apparent returns refraction for obtaining apparent altitude when
 | 
						|
 * altitude is greater than 15 degrees (about 0.26 radians.)
 | 
						|
 *
 | 
						|
 * h must be a computed true "airless" altitude of a celestial body in radians.
 | 
						|
 *
 | 
						|
 * Result is refraction to be added to h to obtain the apparent altitude
 | 
						|
 * of the body.  Unit is radians.
 | 
						|
 */
 | 
						|
function gt15Apparent (h) { // (h float64)  float64
 | 
						|
  // (16.2) p. 105
 | 
						|
  const t = tan(Math.PI / 2 - h);
 | 
						|
  return gt15app1 * t - gt15app2 * t * t * t
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Bennett returns refraction for obtaining true altitude.
 | 
						|
 *
 | 
						|
 * h0 must be a measured apparent altitude of a celestial body in radians.
 | 
						|
 *
 | 
						|
 * Results are accurate to 0.07 arc min from horizon to zenith.
 | 
						|
 *
 | 
						|
 * Result is refraction to be subtracted from h0 to obtain the true altitude
 | 
						|
 * of the body.  Unit is radians.
 | 
						|
 */
 | 
						|
function bennett (h0) { // (h0 float64)  float64
 | 
						|
  // (16.3) p. 106
 | 
						|
  const c1 = D2R / 60;
 | 
						|
  const c731 = 7.31 * D2R * D2R;
 | 
						|
  const c44 = 4.4 * D2R;
 | 
						|
  return c1 / tan(h0 + c731 / (h0 + c44))
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Bennett2 returns refraction for obtaining true altitude.
 | 
						|
 *
 | 
						|
 * Similar to Bennett, but a correction is applied to give a more accurate
 | 
						|
 * result.
 | 
						|
 *
 | 
						|
 * Results are accurate to 0.015 arc min.  Result unit is radians.
 | 
						|
 */
 | 
						|
function bennett2 (h0) { // (h0 float64)  float64
 | 
						|
  const cMin = 60 / D2R;
 | 
						|
  const c06 = 0.06 / cMin;
 | 
						|
  const c147 = 14.7 * cMin * D2R;
 | 
						|
  const c13 = 13 * D2R;
 | 
						|
  const R = bennett(h0);
 | 
						|
  return R - c06 * sin(c147 * R + c13)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Saemundsson returns refraction for obtaining apparent altitude.
 | 
						|
 *
 | 
						|
 * h must be a computed true "airless" altitude of a celestial body in radians.
 | 
						|
 *
 | 
						|
 * Result is refraction to be added to h to obtain the apparent altitude
 | 
						|
 * of the body.
 | 
						|
 *
 | 
						|
 * Results are consistent with Bennett to within 4 arc sec.
 | 
						|
 * Result unit is radians.
 | 
						|
 */
 | 
						|
function saemundsson (h) { // (h float64)  float64
 | 
						|
  // (16.4) p. 106
 | 
						|
  const c102 = 1.02 * D2R / 60;
 | 
						|
  const c103 = 10.3 * D2R * D2R;
 | 
						|
  const c511 = 5.11 * D2R;
 | 
						|
  return c102 / tan(h + c103 / (h + c511))
 | 
						|
}
 | 
						|
 | 
						|
var refraction = {
 | 
						|
  gt15True,
 | 
						|
  gt15Apparent,
 | 
						|
  bennett,
 | 
						|
  bennett2,
 | 
						|
  saemundsson
 | 
						|
};
 | 
						|
 | 
						|
exports.bennett = bennett;
 | 
						|
exports.bennett2 = bennett2;
 | 
						|
exports["default"] = refraction;
 | 
						|
exports.gt15Apparent = gt15Apparent;
 | 
						|
exports.gt15True = gt15True;
 | 
						|
exports.saemundsson = saemundsson;
 |