Angle difference between two bearings: Difference between revisions
Angle difference between two bearings (view source)
Revision as of 12:27, 19 October 2021
, 2 years ago→JS ES6: Tidied
(→JS ES6: Tidied) |
|||
Line 1,640:
<lang JavaScript>(() => {
"use strict";
// ------ ANGLE DIFFERENCE BETWEEN TWO BEARINGS ------
// bearingDelta :: Radians -> Radians -> Radians
const bearingDelta =
// The difference between two bearings: a and b.
const [ax, ay] = [sin(ar), cos(ar)], [bx, by] = [sin(br), cos(br)],▼
const [ax, ay] = [sin(a), cos(a)];
// Cross-product
const sign = ((ay * bx) - (by * ax)) > 0 ?
// Sign * dot-product.
return sign * acos((ax * bx) + (ay * by));
};
// Pi, sin, cos, acos :: Function▼
const [Pi, sin, cos, acos] = ['PI', 'sin', 'cos', 'acos']▼
.map(k => Math[k]),▼
degRad = x => Pi * x / 180.0,▼
▲ radDeg = x => 180.0 * x / Pi;
// main :: IO ()
▲ // TEST ------------------------------------------------------------------
▲ .slice(-n)
▲ ) : strText;
// showMap :: Degrees -> Degrees -> String▼
▲ const showMap = (da, db) =>
.toPrecision(4)}°`);▼
return [▼
[20, 45],
[-45, 45],
Line 1,683 ⟶ 1,671:
[-45, 145]
].map(xy => showMap(...xy))
.join(
// ------------------- FORMATTING --------------------
▲ // showMap :: Degrees -> Degrees -> String
const showMap = (da, db) => {
const
delta = degreesFromRadians(
bearingDelta(
radiansFromDegrees(da)
)(
radiansFromDegrees(db)
)
)
theta = `${da}° +`.padStart(6, " "),
theta1 = ` ${db}° -> `.padStart(11, " "),
diff = `${delta}°`.padStart(7, " ");
return `${theta}${theta1}${diff}`;
};
// --------------------- GENERIC ---------------------
// radiansFromDegrees :: Float -> Float
const radiansFromDegrees = n =>
// degreesFromRadians :: Float -> Float
const degreesFromRadians = x =>
180.0 * x / Pi;
// Abbreviations for trigonometric methods and
// properties of the standard Math library.
const [
// MAIN ---
})();</lang>
{{Out}}
|