Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,35 @@
|
|||
function relativeBearing(b1Rad, b2Rad)
|
||||
{
|
||||
b1y = Math.cos(b1Rad);
|
||||
b1x = Math.sin(b1Rad);
|
||||
b2y = Math.cos(b2Rad);
|
||||
b2x = Math.sin(b2Rad);
|
||||
crossp = b1y * b2x - b2y * b1x;
|
||||
dotp = b1x * b2x + b1y * b2y;
|
||||
if(crossp > 0.)
|
||||
return Math.acos(dotp);
|
||||
return -Math.acos(dotp);
|
||||
}
|
||||
|
||||
function test()
|
||||
{
|
||||
var deg2rad = 3.14159265/180.0;
|
||||
var rad2deg = 180.0/3.14159265;
|
||||
return "Input in -180 to +180 range\n"
|
||||
+relativeBearing(20.0*deg2rad, 45.0*deg2rad)*rad2deg+"\n"
|
||||
+relativeBearing(-45.0*deg2rad, 45.0*deg2rad)*rad2deg+"\n"
|
||||
+relativeBearing(-85.0*deg2rad, 90.0*deg2rad)*rad2deg+"\n"
|
||||
+relativeBearing(-95.0*deg2rad, 90.0*deg2rad)*rad2deg+"\n"
|
||||
+relativeBearing(-45.0*deg2rad, 125.0*deg2rad)*rad2deg+"\n"
|
||||
+relativeBearing(-45.0*deg2rad, 145.0*deg2rad)*rad2deg+"\n"
|
||||
|
||||
+relativeBearing(29.4803*deg2rad, -88.6381*deg2rad)*rad2deg+"\n"
|
||||
+relativeBearing(-78.3251*deg2rad, -159.036*deg2rad)*rad2deg+"\n"
|
||||
|
||||
+ "Input in wider range\n"
|
||||
+relativeBearing(-70099.74233810938*deg2rad, 29840.67437876723*deg2rad)*rad2deg+"\n"
|
||||
+relativeBearing(-165313.6666297357*deg2rad, 33693.9894517456*deg2rad)*rad2deg+"\n"
|
||||
+relativeBearing(1174.8380510598456*deg2rad, -154146.66490124757*deg2rad)*rad2deg+"\n"
|
||||
+relativeBearing(60175.77306795546*deg2rad, 42213.07192354373*deg2rad)*rad2deg+"\n";
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
(() => {
|
||||
"use strict";
|
||||
|
||||
// ------ ANGLE DIFFERENCE BETWEEN TWO BEARINGS ------
|
||||
|
||||
// bearingDelta :: Radians -> Radians -> Radians
|
||||
const bearingDelta = a =>
|
||||
// The difference between two bearings: a and b.
|
||||
b => {
|
||||
const [ax, ay] = [sin(a), cos(a)];
|
||||
const [bx, by] = [sin(b), cos(b)];
|
||||
|
||||
// Cross-product above zero ?
|
||||
const sign = ((ay * bx) - (by * ax)) > 0 ? (
|
||||
+1
|
||||
) : -1;
|
||||
|
||||
// Sign * dot-product.
|
||||
return sign * acos((ax * bx) + (ay * by));
|
||||
};
|
||||
|
||||
|
||||
// ---------------------- TEST -----------------------
|
||||
// main :: IO ()
|
||||
const main = () => [
|
||||
[20, 45],
|
||||
[-45, 45],
|
||||
[-85, 90],
|
||||
[-95, 90],
|
||||
[-45, 125],
|
||||
[-45, 145]
|
||||
].map(xy => showMap(...xy))
|
||||
.join("\n");
|
||||
|
||||
|
||||
// ------------------- FORMATTING --------------------
|
||||
|
||||
// showMap :: Degrees -> Degrees -> String
|
||||
const showMap = (da, db) => {
|
||||
const
|
||||
delta = degreesFromRadians(
|
||||
bearingDelta(
|
||||
radiansFromDegrees(da)
|
||||
)(
|
||||
radiansFromDegrees(db)
|
||||
)
|
||||
)
|
||||
.toPrecision(4),
|
||||
theta = `${da}° +`.padStart(6, " "),
|
||||
theta1 = ` ${db}° -> `.padStart(11, " "),
|
||||
diff = `${delta}°`.padStart(7, " ");
|
||||
|
||||
return `${theta}${theta1}${diff}`;
|
||||
};
|
||||
|
||||
// --------------------- GENERIC ---------------------
|
||||
|
||||
// radiansFromDegrees :: Float -> Float
|
||||
const radiansFromDegrees = n =>
|
||||
Pi * n / 180.0;
|
||||
|
||||
// degreesFromRadians :: Float -> Float
|
||||
const degreesFromRadians = x =>
|
||||
180.0 * x / Pi;
|
||||
|
||||
// Abbreviations for trigonometric methods and
|
||||
// properties of the standard Math library.
|
||||
const [
|
||||
Pi, sin, cos, acos
|
||||
] = ["PI", "sin", "cos", "acos"]
|
||||
.map(k => Math[k]);
|
||||
|
||||
// MAIN ---
|
||||
return main();
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue