django-vue3-admin-web/node_modules/astronomia/lib/circle.cjs
2025-10-20 21:21:14 +08:00

65 lines
1.7 KiB
JavaScript

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
/**
* @copyright 2013 Sonia Keys
* @copyright 2016 commenthol
* @license MIT
* @module circle
*/
/**
* Smallest finds the smallest circle containing three points.
*
* Arguments should represent coordinates in right ascension and declination
* or longitude and latitude. Result Δ is the diameter of the circle, typeI
* is true if solution is of type I.
*
* @param {Coord} c1 - ra, dec point 1
* @param {Coord} c2 - ra, dec point 2
* @param {Coord} c3 - ra, dec point 3
* @returns {Array} [Δ, typeI]
* {Number} Δ - diameter of the circle
* {Number} typeI - true - Two points on circle, one interior.
* false - All three points on circle.
*/
function smallest (c1, c2, c3) {
// Using haversine formula
const cd1 = Math.cos(c1.dec);
const cd2 = Math.cos(c2.dec);
const cd3 = Math.cos(c3.dec);
let a = 2 * Math.asin(Math.sqrt(hav(c2.dec - c1.dec) + cd1 * cd2 * hav(c2.ra - c1.ra)));
let b = 2 * Math.asin(Math.sqrt(hav(c3.dec - c2.dec) + cd2 * cd3 * hav(c3.ra - c2.ra)));
let c = 2 * Math.asin(Math.sqrt(hav(c1.dec - c3.dec) + cd3 * cd1 * hav(c1.ra - c3.ra)));
if (b > a) {
[a, b] = noswap(b, a);
}
if (c > a) {
[a, c] = noswap(c, a);
}
if (a * a >= b * b + c * c) {
return [a, true]
}
// (20.1) p. 128
return [2 * a * b * c / Math.sqrt((a + b + c) * (a + b - c) * (b + c - a) * (a + c - b)), false]
}
const noswap = function (a, b) {
return [a, b]
};
/**
* haversine function (17.5) p. 115
*/
const hav = function (a) {
return 0.5 * (1 - Math.cos(a))
};
var circle = {
smallest
};
exports["default"] = circle;
exports.smallest = smallest;