UNPKG

2.66 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
8
9exports.smallest = smallest;
10/**
11 * @copyright 2013 Sonia Keys
12 * @copyright 2016 commenthol
13 * @license MIT
14 * @module circle
15 */
16/**
17 * Circle: Chapter 20, Smallest Circle containing three Celestial Bodies.
18 */
19
20/**
21 * Smallest finds the smallest circle containing three points.
22 *
23 * Arguments should represent coordinates in right ascension and declination
24 * or longitude and latitude. Result Δ is the diameter of the circle, typeI
25 * is true if solution is of type I.
26 *
27 * @param {base.Coords} c1 - ra, dec point 1
28 * @param {base.Coords} c2 - ra, dec point 2
29 * @param {base.Coords} c3 - ra, dec point 3
30 * @returns {Array} [Δ, typeI]
31 * {Number} Δ - diameter of the circle
32 * {Number} typeI - true - Two points on circle, one interior.
33 * false - All three points on circle.
34 */
35function smallest(c1, c2, c3) {
36 // Using haversine formula
37 var cd1 = Math.cos(c1.dec);
38 var cd2 = Math.cos(c2.dec);
39 var cd3 = Math.cos(c3.dec);
40 var a = 2 * Math.asin(Math.sqrt(hav(c2.dec - c1.dec) + cd1 * cd2 * hav(c2.ra - c1.ra)));
41 var b = 2 * Math.asin(Math.sqrt(hav(c3.dec - c2.dec) + cd2 * cd3 * hav(c3.ra - c2.ra)));
42 var c = 2 * Math.asin(Math.sqrt(hav(c1.dec - c3.dec) + cd3 * cd1 * hav(c1.ra - c3.ra)));
43 if (b > a) {
44 var _noswap = noswap(b, a);
45
46 var _noswap2 = _slicedToArray(_noswap, 2);
47
48 a = _noswap2[0];
49 b = _noswap2[1];
50 }
51 if (c > a) {
52 var _noswap3 = noswap(c, a);
53
54 var _noswap4 = _slicedToArray(_noswap3, 2);
55
56 a = _noswap4[0];
57 c = _noswap4[1];
58 }
59 if (a * a >= b * b + c * c) {
60 return [a, true];
61 }
62 // (20.1) p. 128
63 return [2 * a * b * c / Math.sqrt((a + b + c) * (a + b - c) * (b + c - a) * (a + c - b)), false];
64}
65
66var noswap = function noswap(a, b) {
67 return [a, b];
68};
69
70/**
71 * haversine function (17.5) p. 115
72 */
73var hav = function hav(a) {
74 return 0.5 * (1 - Math.cos(a));
75};
76
77exports.default = {
78 smallest: smallest
79};
\No newline at end of file