HP Prime and HP 50g:
Spherical Triangles
These
set of programs address four common scenarios of solving spherical triangles.
Spherical Triangle with angles A, B, C and sides a, b, c. |
Referring
to the diagram above: a, b, and c
(lowercase) represents the sides, while A, B, and C represent (upper case)
represent the angles.
The
programs are named symbolizing your starting point. S is used for side and A is used for
angle. (If you have better program
names, feel free to suggest.) All
examples are given in degrees.
SSSSPHTRI: Given Three Sides
(a, b, c)
The
equations used are:
A = ACOS((COS(a)-COS(b)*COS(c))/(SIN(b)*SIN(c)))
B = ASIN(SIN(A)*SIN(b)/SIN(a))
C = ASIN(SIN(A)*SIN(c)/SIN(a))
HP
Prime:
EXPORT SSSSPHTRI(a,b,c)
BEGIN
LOCAL A,B,C;
// spherical triangles
// given external angels
// EWS 2015-04-13
A:=ACOS((COS(a)-COS(b)*COS(c))/
(SIN(b)*SIN(c)));
B:=ASIN(SIN(A)*SIN(b)/SIN(a));
C:=ASIN(SIN(A)*SIN(c)/SIN(a));
RETURN {A,B,C};
END;
HP
50g:
<< → a b c
<< a COS b COS
c COS * - b SIN c SIN * / ACOS
DUPDUP SIN b SIN * a
SIN / ASIN
SWAP SIN c SIN * a
SIN / ASIN >> >>
Output: A, B, C
Example:
Input: a = 10⁰, b = 12⁰, c = 14⁰
Output:
A = 44.7594887937⁰,
B = 57.4655995208⁰, C = 78.8067166022⁰
SSASPHRTRI: Given Side,
Side, Angle (b, c, B)
The
equations used are:
C = ASIN(SIN(c)*SIN(B)/SIN(b))
A = ACOS((SIN(B)*SIN(C)*COS(b)*COS(c)-COS(B)*COS(C))/(1-SIN(B)*SIN(C)*
SIN(b)*SIN(c)))
a = ASIN(SIN(A)*SIN(b)/SIN(B))
HP
Prime:
EXPORT SSASPHTRI(b,c,B)
BEGIN
// spherical triangle
// given b,c,B; return C,A,a
// EWS 2015-04-13
LOCAL C,A,a;
C:=ASIN(SIN(c)*SIN(B)/SIN(b));
A:=ACOS((SIN(B)*SIN(C)*COS(b)*COS(c)
-COS(B)*COS(C))/(1-SIN(B)*SIN(C)*
SIN(b)*SIN(c)));
a:=ASIN(SIN(A)*SIN(b)/SIN(B));
RETURN {C,A,a};
HP
50g:
<< → b c B
<< c SIN B SIN
* b SIN / ASIN
DUPDUP DUP COS B COS
* NEG SWAP SIN B SIN * b COS * c COS * +
SWAP SIN B SIN * b
COS * c COS * + SWAP SIN B SIN * b SIN * c SIN *
NEG 1 + / ACOS
DUP SIN b SIN * B
SIN / ASIN >> >>
Output:
C, A, a
Example:
Input: b = 12⁰,
c = 11⁰, B = 49⁰
Output: C = 43.8384683062⁰, A = 88.3203610398⁰, a = 15.983905611⁰
SASSPHITRI: Given Side,
Angle, Side (b, A, c)
Equations
Used:
a
= ACOS(COS(b)*COS(c)+SIN(b)*SIN(c)*COS(A))
B
= ASIN(SIN(b)*SIN(A)/SIN(a))
C
= ASIN(SIN(c)*SIN(A)/SIN(a))
HP
Prime:
EXPORT SASSPHTRI(b,A,c)
BEGIN
// spherical triangle
// given b,A,c; return a,B,C
// EWS 2015-04-13
LOCAL a,B,C;
a:=ACOS(COS(b)*COS(c)+SIN(b)*SIN(c)
*COS(A));
B:=ASIN(SIN(b)*SIN(A)/SIN(a));
C:=ASIN(SIN(c)*SIN(A)/SIN(a));
RETURN {a,B,C};
END;
HP
50g:
<< → b A c
<< b COS c COS
* b SIN c SIN * A COS * + ACOS
DUPDUP SIN INV b SIN
* A SIN * ASIN
SWAP SIN INV c SIN *
A SIN * ASIN >> >>
Output: a, B, C
Example:
Input: b = 10⁰,
A = 46.5⁰,
c = 12⁰
Output: a = 8.833284800833⁰, B = 55.1114117424⁰, C = 79.1481099363⁰
AASSPHITRI: Given Angle,
Angle, Side (A, B, a)
Equations
Used:
b
= ASIN(SIN(B)*SIN(a)/SIN(A))
c
= ACOS((COS(a)*COS(b)-SIN(a)*SIN(b)*COS(A)*COS(B))/(1-SIN(a)*SIN(b)*SIN(A)*SIN(B)))
C
= ACOS(−COS(A)*COS(B)+SIN(A)*SIN(B)*COS(c))
HP
Prime:
EXPORT AASSPHTRI(A,B,a)
BEGIN
// spherical triangle
// EWS 2015-04-13
// given A,B,a; return b,c,C
LOCAL b,c,C;
b:=ASIN(SIN(B)*SIN(a)/SIN(A));
c:=ACOS((COS(a)*COS(b)-SIN(a)*SIN(b)*
COS(A)*COS(B))/(1-SIN(a)*SIN(b)*SIN(A)
*SIN(B)));
C:=ACOS(−COS(A)*COS(B)+SIN(A)*SIN(B)
*COS(c));
RETURN {b,c,C};
END;
HP
50g:
<< → A B a
<< B SIN a SIN * A SIN / ASIN
4 NDUPN DROP
COS a COS * SWAP SIN a SIN * A COS * B COS * NEG +
SWAP SIN a SIN * A SIN * B SIN * NEG 1 + / ACOS
DUP COS B SIN * A SIN * A COS B COS * - ACOS >>
>>
Output: b, c, C
Example:
Input: A = 41⁰,
B = 33⁰, a = 12⁰
Output: b ≈ 9.939⁰,
c ≈ 17.641⁰, C ≈ 107.004⁰
HP 50g Programming Notes:
DUPDUP: Left Shift, EVAL (PRG), F1 (STACK), NXT, NXT,
F5 (DUPDUP)
NDUPN: (object, number of times to be duplicated
-> duplicated objects, number)
Left
Shift, EVAL (PRG), F1 (STACK), Left Shift, NXT (PREV), F1 (NDUPN)
NEG:
+/-
INV: 1/X
Source:
Weisstein,
Eric W. "Spherical
Trigonometry." From MathWorld--A Wolfram Web
Resource. http://mathworld.wolfram.com/SphericalTrigonometry.html Retrieved April 11, 2015
This
blog is property of Edward Shore. 2015