sphtriangles

# Spherical Triangles for the HP-41

Overview

-This program finds the sides and the angles of a spherical triangle.
-It works in all angular modes but angles must be entered as decimals.
-It conforms to the standard triangle notation ( A opposite a ... etc ... )

Formulae:

sin a / sin A = sin b / sin B = sin c / sin C
cos a = cos b cos c + sin b sin c cos A
cos A = -cos B cos C + sin B sin C cos a
c = arctan ( cos A tan b ) + arctan ( cos B tan a )    ( modulo 180° )

-This last formula is used in cases n°5 and n°6.
-Other formulae can be used, for example:

tan c/2 = ( tan (a-b)/2 ).( sin (A+B)/2 ) / ( sin (A-B)/2 )              ( F1 )
tan c/2 = ( tan (a+b)/2 ).( cos (A+B)/2 ) / ( cos (A-B)/2 )           ( F2 )

but ( F1 ) cannot be applied if  a = b & A = B and  ( F2 ) doesn't work if  a + b = A + B = 180°

A
*
*               *      b
c    *                         *                                with  A + B + C > 180°
*                               *
B  *    *    *    *    *    *    *  C
a

Program Listing

Data Registers:      R00:  temp

R01 = a          R04 =  A
R02 = b          R05 =  B
R03 = c          R06 =  C
Flags: /
Subroutines: /

 01  LBL "SABC"   02  GTO IND T   03  LBL 00   04  STO 04   05  RDN   06  STO 05   07  X<>Y   08  STO 06   09  R^   10  XEQ 11   11  STO 01   12  LBL 07   13  RCL 04   14  RCL 06   15  RCL 05   16  XEQ 11   17  STO 02   18  RCL 04   19  RCL 05   20  RCL 06   21  XEQ 11   22  STO 03   23  RCL 02   24  RCL 01   25  RTN   26  LBL 01   27  STO 01   28  RDN   29  STO 05   30  X<>Y   31  STO 06   32  R^   33  CHS   34  XEQ 12   35  STO 04   36  XEQ 07   37  CLX 38  RCL 04   39  RTN   40  LBL 02   41  STO 01           42  X<>Y   43  STO 02   44  X<> Z   45  STO 06   46  XEQ 12   47  STO 03   48  XEQ 08   49  RCL 03   50  RCL 05   51  RCL 04   52  RTN   53  LBL 03   54  STO 01   55  X<>Y   56  STO 02   57  X<> Z   58  STO 03   59  CHS   60  XEQ 11   61  STO 06   62  LBL 08   63  RCL 01   64  RCL 03   65  RCL 02   66  CHS   67  XEQ 11   68  STO 05   69  RCL 02   70  RCL 03   71  RCL 01   72  CHS   73  XEQ 11   74  STO 04 75  RCL 06   76  RCL 05   77  RCL 04           78  RTN   79  LBL 04   80  STO 01   81  SIN   82  X<>Y   83  STO 04   84  SIN   85  /   86  X<>Y   87  STO 05   88  SIN   89  *   90  ASIN   91  LBL 09   92  STO 02   93  XEQ 14   94  RCL 02   95  FC?C 25   96  CLST   97  RTN   98  RCL 02   99  COS 100  CHS 101  ACOS 102  GTO 09 103  LBL 05 104  STO 01 105  SIN 106  X<>Y 107  STO 02 108  SIN 109  / 110  X<>Y 111  STO 05 112  SIN 113  * 114  ASIN 115  LBL 10         116  STO 04 117  XEQ 14 118  RCL 04 119  FC?C 25 120  CLST 121  RTN 122  RCL 04 123  COS 124  CHS 125  ACOS 126  GTO 10 127  LBL 11 128  XEQ 13 129  + 130  X<>Y 131  / 132  ACOS 133  RTN 134  LBL 12 135  XEQ 13 136  RCL Z 137  * 138  + 139  ACOS 140  RTN 141  LBL 13 142  STO 00 143  SIGN 144  P-R 145  X<> Z 146  1 147  P-R 148  ST* T 149  RDN 150  * 151  ABS 152  X<>Y 153  RCL 00         154  COS 155  RTN 156  LBL 14 157  SF 25 158  RCL 02 159  TAN 160  RCL 04 161  COS 162  * 163  ATAN 164  RCL 01 165  TAN 166  RCL 05 167  COS 168  * 169  ATAN 170  + 171  1 172  CHS 173  ACOS 174  MOD 175  STO 03 176  RCL 01 177  RCL 02 178  RCL 03 179  CHS 180  XEQ 11 181  STO 06 182  RCL03 183  END

( 233 bytes / SIZE 007 )

-Execution time ~ 8 seconds

1°) First case:  the 3 angles are known

 STACK INPUTS OUTPUTS T 0 / Z C c Y B b X A a

Example:    A = 50° , B = 70° , C = 100°

0   ENTER^
100 ENTER^
70  ENTER^
50  XEQ "SABC"  >>>>   a = 50.9193°   RDN   b = 72.2173°   RDN   c = 86.3204°

2°) Second case: 1 side and the 2 adjacent angles are known

 STACK INPUTS OUTPUTS T 1 / Z C c Y B b X a A

Example:    a = 30° , B = 50° , C = 100°

1   ENTER^
100 ENTER^
50  ENTER^
30  XEQ "SABC"  >>>>  A = 40.0971°  RDN  b =  36.4896°   RDN  c =  49.8627°

3°) Third case: 2 sides and the included angle are known

 STACK INPUTS OUTPUTS T 2 / Z C c Y b B X a A

Example:     a = 30°   b = 40°   C = 80°

2   ENTER^
80  ENTER^
40  ENTER^
30  XEQ "SABC"  >>>>  A = 45.1309°   RDN   B = 65.6596°   RDN   c = 44.0096°

4°) Fourth case: 3 known sides

 STACK INPUTS OUTPUTS T 3 / Z c C Y b B X a A

Example:        a = 30°   b = 40°  c = 50°

3    ENTER^
50   ENTER^
40   ENTER^
30   XEQ "SABC"  >>>>   A = 40.6441°   RDN   B = 56.8634°   RDN   C = 93.6796°

5°) Fifth case: 1 side , the opposite angle and another angle are known

 STACK INPUTS OUTPUTS1 OUTPUTS2 T 4 / / Z B C C' Y A c c' X a b b'

Example:      a = 30°    A = 40°   B = 60°

4    ENTER^
60   ENTER^
40   ENTER^
30   XEQ "SABC"  >>>>   b  =  42.3493°   RDN    c =  51.0269°   RDN   C =  91.8854°
R/S             >>>>   b' = 137.6507°  RDN    c' = 161.1774°  RDN  C' = 155.4947°

-Here, we have 2 solutions.
-If one of the solutions must be rejected, the stack is cleared  ( X = Y = Z = T = 0 )

-For instance   a = 30°  b = 110°  B = 40°

4    ENTER^
40   ENTER^
110  ENTER^
30   XEQ "SABC"  >>>>  b = 20.0000°   RDN   c = 16.7627°   RDN   C = 32.8220°
R/S            >>>>  0  RDN  0  RDN  0

-Thus , there is only one solution.

6°) Sixth case: 2 sides and one adjacent angle known

 STACK INPUTS OUTPUTS1 OUTPUTS2 T 5 / / Z B C C' Y b c c' X a A A'

Example:    a = 100°   b = 110°   B = 120°

5     ENTER^
120   ENTER^
110   ENTER^
100   XEQ "SABC"  >>>>   A =  65.1763°   RDN   c =  21.4983°    RDN    C =  19.7395°
R/S             >>>>   A' = 114.8237°  RDN   c' = 119.6509°   RDN   C' = 126.7814°

-In this example, there are also 2 solutions.
-If one of the solutions must be rejected, the stack is cleared  ( X = Y = Z = T = 0 )

-In cases 1-2-3-4 ,  T-register input = the number of known sides.
-In cases 5-6 , the results are not very accurate if all angles are near 90°