# hp41programs

Hyperbolic Tetrahedron

# Hyperbolic Tetrahedron for the HP-41

Overview

1°)  Volume of Hyperbolic Orthotetrahedra
2°)  General Case

a)  Volume of a Hyperbolic Tetrahedron
b)  Dihedral Angles >>> Edge Lengths
c)  Edge Lengths >>> Dihedral Angles

1°)  Volume of Hyperbolic Orthotetrahedra

-An hyperbolic Orthotetraedron may be defined by 3 dihedral angles A , B , C   ( the 3 other dihedral angles = 90° )

provided  A , B , C < 90°  ;  A+B , B+C >= 90°  ;  (Sin A) (Sin C) < Cos B

-The volume is calculated by the formula:

V = (1/4) [ L(A+d) - L(A-d) + L(C+d) - L(C-d) - L(90°-B+d) + L(90°-B+d) + 2.L(90°-d) ]

where  d = Arc Tan [ sqrt( cos2 B - sin2 A  sin2 C ) / cos A / cos C ]    and L = Lobachevsky function

Data Registers:  R00: temp  R01 = V ,  R02 = A , R03 = B , R04 = C , R05 = d
Flags: /
Subroutine:   "LOB"  ( cf "Lobachevsky Function for the HP-41" )

 01  LBL "VHOT"  02  DEG  03  STO 04  04  SIN  05  RCL Z  06  STO 02          07  SIN  08  *  09  X^2  10  CHS  11  X<>Y  12  STO 03  13  COS  14  X^2 15  +  16  SQRT  17  RCL 02  18  COS  19  RCL 04          20  COS  21  *  22  /  23  ATAN  24  STO 05  25  RCL 02  26  +  27  XEQ "LOB"  28  STO 01 29  RCL 02  30  RCL 05  31  -  32  XEQ "LOB"  33  ST- 01  34  RCL 04   35  RCL 05          36  +  37  XEQ "LOB"  38  ST+ 01  39  RCL 04  40  RCL 05  41  -  42  XEQ "LOB" 43  ST- 01  44  90  45  RCL 03  46  -  47  RCL 05          48  +  49  XEQ "LOB"  50  ST- 01  51  90  52  RCL 03  53  -  54  RCL 05  55  -  56  XEQ "LOB" 57  ST+ 01  58  90  59  RCL 05          60  -  61  XEQ "LOB"  62  ST+ X  63  RCL 01  64  +  65  4  66  /  67  STO 01  68  END

( 115 bytes / SIZE 006 )

 STACK INPUTS OUTPUTS Z A / Y B / X C Volume

Where  A , B , C   are expressed in degrees                     ---Execution time = 46s---

Example1:     A = C = 36°  ,   B = 60°

36  ENTER^
60  ENTER^
36  XEQ "VHOT"  >>>>   0.09332553955

-The Seifert-Weber space is obtained by 120 such orthotetrahedra, so multiplying the result by 120 yields.

V = 11.19906475   ( the last decimal should be a 4 )

Example2:     A = 41°  ,   B = 67°  ,  C = 28°

41  ENTER^
67  ENTER^
28     R/S      >>>>   Volume = 0.03420659993

Note:

-This routine does not check that  A , B , C < 90°  &  A+B , B+C >= 90°

2°)  General Case

a)  Volume of a Hyperbolic Tetrahedron

*
* *  *
A    *       *     *    C
*          B  *         *
*                        *            *                                       Here,  A B C D E ( invisible ) F are the 6 dihedral angles ( not the edges lengths )
*                                  *                   *
F     *           *        * D
*

-In the general case, the volume of a hyperbolic tetrahedron is more complicated ( see reference [2] ).
-It is the sum of 16 Lobachevsky functions.

-We assume that the 6 dihedral angles A , B , C , D , E , F are known and expressed in degrees.
-They must be stored in registers R01 to R06.

Data Registers:              R00: temp                             ( Registers R01 thru R06 are to be initialized before executing "HTHV" )

•  R01 = A      •  R04 = D         R07 = Volume        R08 to R10: temp
•  R02 = B      •  R05 = E
•  R03 = C      •  R06 = F
Flags: /
Subroutine:  "LOB"  ( cf "Lobachevsky Function for the HP-41" )

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

( 242 bytes / SIZE 011 )

 STACK INPUT OUTPUT X / Volume

Provided  R01 = A , R02 = B , R03 = C , R04 = D , R05 = E , R06 = F , all expressed in degrees

Example1:     A = 71° , B = 59° , C = 61° , D = 37° , E = 84° , F = 87°

71  STO 01     37  STO 04
59  STO 02     84  STO 05
61  STO 03     87  STO 06

XEQ "HTHV"  >>>>  V = 0.308555268                                               ---Execution time = 115s---

Example2:     A = 72° , B = 60° , C = 60° , D = 36° , E = 90° , F = 90°

72  STO 01                    36  STO 04
60  STO 02  STO 03      90  STO 05  STO 06

R/S     >>>>  V = 0.1866510793

multiplying by 60 gives again the volume of the Seifert-Weber space:   11.19906476   ( the last decimal should be a 4 )

b)  Dihedral Angles >>> Edge Lengths

-Assuming the 6 dihedral angles ( A , B , C , D , E , F )  are known,
"DA-EL" computes the 6 corresponding edges lengths  ( a , b , c , d , e , f )  and store them into R11 to R16.

Formulae:

Cosh a = c34 / sqrt ( c33.c44 )   with

c33 = 1 - 2 Cos A Cos E Cos F - Cos2 A - Cos2 E - Cos2 F
c44 = 1 - 2 Cos A Cos B Cos C - Cos2 A - Cos2 B - Cos2 C

c34 = Cos D + Cos A Cos B Cos E + Cos A Cos C Cos F + Cos B Cos F - Cos2 A Cos D + Cos C Cos E

-Similar formulae might be used for the other edges but the order of the dihedral angles is changed in R01 to R06
in order to use always the formulas above.

Data Registers:              R00 & R07 to R10: temp                        ( Registers R01 thru R06 are to be initialized before executing "DA-EL" )

•  R01 = A      •  R04 = D                          R11 = a         R14 = d
•  R02 = B      •  R05 = E         give            R12 = b        R15 = e
•  R03 = C      •  R06 = F                           R13 = c        R16 = f
Flags: /
Subroutines:  /

-Line 121  ACOSH  is an M-code routine ( inverse hyperbolic cosine )
which may be replaced by  XEQ "ACH"   ( cf "Hyperbolic functions for the HP-41" )

 01  LBL "DA-EL"   02  XEQ 01   03  STO 11   04  RCL 01   05  X<> 02   06  STO 01   07  RCL 04   08  X<> 05   09  STO 04            10  XEQ 01   11  STO 12   12  RCL 01   13  X<> 03   14  STO 01   15  RCL 04   16  X<> 06   17  STO 04   18  XEQ 01   19  STO 13   20  RCL 01   21  X<> 05   22  STO 01   23  RCL 02   24  X<> 04   25  STO 02   26  XEQ 01 27  STO 14   28  RCL 01   29  X<> 06   30  STO 01   31  RCL 03   32  X<> 04   33  STO 03   34  XEQ 01   35  STO 15            36  RCL 01   37  X<> 02   38  STO 01   39  RCL 04   40  X<> 05   41  STO 04   42  XEQ 01   43  STO 16   44  RCL 01   45  X<> 06   46  X<> 04   47  X<> 03   48  STO 01   49  RCL 02   50  X<> 05   51  STO 02   52  GTO 02 53  LBL 01   54  RCL 01   55  1   56  P-R   57  STO 00   58  X<>Y   59  X^2   60  STO 07   61  RCL 05            62  COS   63  STO 08   64  ST* Z   65  X^2   66  -    67  RCL 06   68  COS   69  STO 09   70  ST* Z   71  X^2   72  -   73  X<>Y   74  ST+ X   75  -   76  RCL 00   77  RCL 07   78  RCL 02 79  COS   80  STO 07   81  ST* Z   82  X^2   83  -   84  RCL 03   85  COS   86  STO 10            87  ST* Z   88  X^2   89  -   90  X<>Y   91  ST+ X   92  -   93  *   94  RCL 07   95  RCL 08   96  *   97  RCL 09   98  ST* 07   99  RCL 10 100  * 101  + 102  RCL 00 103  RCL 04 104  COS 105  STO 09 106  * 107  - 108  RCL 00 109  * 110  RCL 09          111  + 112  RCL 07 113  + 114  RCL 08 115  RCL 10 116  * 117  + 118  X<>Y 119  SQRT 120  / 121  ACOSH 122  RTN 123  LBL 02 124  RCL 14 125  RCL 13 126  RCL 12 127  RCL 11 128  END

( 174 bytes / SIZE 017 )

 STACK INPUTS OUTPUTS T / d Z / c Y / b X / a

Example:      A = 71° , B = 59° , C = 61° , D = 37° , E = 84° , F = 87°

71  STO 01     37  STO 04
59  STO 02     84  STO 05
61  STO 03     87  STO 06

XEQ "DA-EL"  >>>>   a = 1.203427992  = R11                            ---Execution time = 36s---
RDN    b = 2.439545899 = R12
RDN    c = 2.642741752 = R13
RDN    d = 3.020541806 = R14

and   R15 = e = 2.114152483  ,   R16 = f = 1.938907707

Notes:

-Registers R01 to R06 are modified during the calculations, but their original content is restore at the end ( lines 44 to 51 )
-This program works in all angular modes.

c)  Edge Lengths >>> Dihedral Angles

-Assuming now that the 6 edge lengths  ( a , b , c , d , e , f )  are known,
"EL-DA" computes the 6 corresponding dihedral angles ( A , B , C , D , E , F )  and store them into R11 to R16.

Formulae:

Cos A = c'12 / sqrt ( c'11.c'22 )   with

c'11 = -1 - 2 Cosh a Cosh b Cosh f + Cosh2 a + Cos2 b + Cos2 f
c'22 = -1 - 2 Cosh a Cosh c Cosh e + Cosh2 A + Cosh2 c + Cosh2 e

c'12 = Cosh d + Cosh a Cosh c Cosh f + Cosh a Cosh b Cosh e - Cosh b Cosh c - Cosh2 a Cosh d - Cosh e Cosh f

-Similar formulae might be used for the other angles but the order of the edge lengths is changed in R01 to R06
in order to use always the formulas above.

Data Registers:              R00 & R07 to R10: temp                       ( Registers R01 thru R06 are to be initialized before executing "EL-DA" )

•  R01 = a      •  R04 = d                           R11 = A         R14 = D
•  R02 = b      •  R05 = e         give            R12 = B         R15 = E
•  R03 = c      •  R06 = f                            R13 = C         R16 = F
Flags: /
Subroutines:  /

-2 M-Code routines SINH & COSH are used but you can also:

-add  LBL 00  E^X  1/X  ST+ L  CLX  2  ST/ L  X<> L  RTN   after line 122
-replace all the  COSH  by  XEQ 00
-and replace lines 57-58 by  RCL 01  E^X-1  LASTX  CHS  E^X-1  -  2  /

 01  LBL "EL-DA"   02  XEQ 01   03  STO 11   04  RCL 01   05  X<> 02   06  STO 01   07  RCL 04   08  X<> 05   09  STO 04   10  XEQ 01   11  STO 12            12  RCL 01   13  X<> 03   14  STO 01   15  RCL 04   16  X<> 06   17  STO 04   18  XEQ 01   19  STO 13   20  RCL 01   21  X<> 05   22  STO 01   23  RCL 02   24  X<> 04   25  STO 02   26  XEQ 01 27  STO 14   28  RCL 01   29  X<> 06   30  STO 01   31  RCL 03   32  X<> 04   33  STO 03   34  XEQ 01   35  STO 15   36  RCL 01            37  X<> 02   38  STO 01   39  RCL 04   40  X<> 05   41  STO 04   42  XEQ 01   43  STO 16   44  RCL 01   45  X<> 06   46  X<> 04   47  X<> 03   48  STO 01   49  RCL 02   50  X<> 05   51  STO 02   52  GTO 02 53  LBL 01   54  RCL 01   55  COSH   56  STO 00   57  LASTX   58  SINH   59  X^2   60  STO 07   61  RCL 02            62  COSH   63  STO 08   64  ST* Z   65  X^2   66  +   67  RCL 06   68  COSH   69  STO 09   70  ST* Z   71  X^2   72  +   73  X<>Y    74  ST+ X   75  -   76  RCL 00   77  RCL 07   78  RCL 03 79  COSH   80  STO 07   81  ST* Z   82  X^2   83  +   84  RCL 05   85  COSH   86  STO 10            87  ST* Z   88  X^2   89  +   90  X<>Y   91  ST+ X   92  -   93  *   94  RCL 07   95  RCL 09   96  *   97  RCL 08   98  ST* 07   99  RCL 10 100  * 101  + 102  RCL 00 103  RCL 04 104  COSH 105  STO 08 106  * 107  - 108  RCL 00 109  * 110  RCL 07          111  - 112  RCL 08 113  + 114  RCL 09 115  RCL 10 116  * 117  - 118  X<>Y 119  SQRT 120  / 121  ACOS 122  RTN 123  LBL 02 124  RCL 14 125  RCL 13 126  RCL 12 127  RCL 11 128  END

( 180 bytes / SIZE 017 )

 STACK INPUTS OUTPUTS T / d Z / c Y / b X / a

---Execution time = 39s---

Example:

-With the 6 edges lengths found in the previous paragraph, we find the original dihedral angles:

A = 71° , B = 59° , C = 61° , D = 37° , E = 84° , F = 87°

with small roundoff-errors in the last decimals.

Notes:

-Registers R01 to R06 are modified during the calculations, but their original content is restore at the end ( lines 44 to 51 )
-This program works in all angular modes.

References:

[1]  John G. Ratcliffe - "Foundations of Hyperbolic Manifolds" -  which may be dowloaded freely  here
[2]  D. Derevnin & A. Mednykh - "Volume of Hyperbolic Tetrahedron"
[3]  J. Murakami & A. Ushijima - " A Volume Formula for Hyperbolic Tetrahedra in Terms of Edge Lengths"