Tetrahedron

# Tetrahedron for the HP-41

Overview

0°)  Volume of a Tetrahedron
1°)  Insphere, Circumsphere and Exspheres
2°)  Dihedral Angles

a)  Dihedral Angles
b)  Volume + Dihedral Angles

3°)  Trihedral Angles
4°)  Random Tetrahedra
5°)  A few Heron Tetrahedra

a)  Program#1
b)  Program#2 ( Long Integers )

6°)  Generating Integer Tetrahedra

-We use the following conventions:
-The edges  d , e , f  are respectively opposite to  a , b , c   ( non co-planar )
-The edges  a , b , c  intersect at the same vertex  S

C
*
*      *
*             *
*         d *     *
c  *                           *    e
*                      B         *
*                         *              *
*               b *                *         *
*            *                             f  *      *
*      *                                                *  *
S *     *    *    *    *    *    *    *    *    *    *     *  A
a

0°)  Volume of a Tetrahedron

-This program is almost the same as "THV" listed in "Heron Formula and its generalization"
-But here, R00 and R07 are unused.
-Moreover, a negative number is returned if  V2 < 0  to avoid a DATA ERROR in this case

Data Registers:              R00 = unused                 ( Registers R01 thru R06 are to be initialized before executing "THV" )

•  R01 = a       •  R04 = d
•  R02 = b       •  R05 = e
•  R03 = c       •  R06 = f
Flags: /
Subroutines: /

 01  LBL "THV"  02  4  03  RCL 01   04  X^2  05  ST* Y  06  RCL 06        07  X^2  08  -  09  RCL 02  10  X^2  11  ST* Z 12  +  13  STO Z  14  X^2  15  -  16  RCL 03        17  X^2  18  ST* Y  19  RCL 04  20  X^2  21  -  22  RCL 02 23  X^2  24  +  25  ST* Z  26  RCL 01        27  *  28  X^2  29  -  30  RCL 01  31  X^2  32  RCL 05  33  X^2 34  -  35  RCL 03        36  X^2  37  +  38  ST* Z  39  RCL 02  40  *  41  X^2  42  -  43  +  44  SIGN 45  LASTX        46  ABS  47  SQRT  48  *  49  12  50  /  51  END

( 66 bytes / SIZE 007 )

 STACK INPUT OUTPUT X / Volume

---Execution time = 2s---

Example1:           a = 6   b = 7   c = 8   d = 9   e = 10   f = 11

-Store these 6 numbers into  R01 thru R06

XEQ "THV"  >>>>   V = 48

Example2:          a = 3   b = 5   c = 7   d = 6   e = 8   f = 2

-Store these 6 numbers into  R01 thru R06

XEQ "THV"  >>>>  V = -12

-Since the result is "negative" ( actually  V = 12 i )  this is not a real tetrahedron !

1°)  Insphere, Circumsphere and Exspheres

-Given the 6 sides of a tetrahedron a , b , c , d , e , f , this program computes the volume V of the tetrahedron,
and the radii  r , R , r1 , r2 , r3 , r4  of the insphere, the circumsphere and the 4 exspheres.
-There are 3 other "exterior" spheres that are not calculated by this routine - though they could be...

Formulae:

-The areas W , X , Y , Z  of the 4 faces  ABC , SBC , SCA , SAB are calculated by Héron's formula.
V is computed by the formula given in "Héron's Formula and its Generalization for the HP-41"

-Let P = ( a d + b e + c f ) / 2   we have R = circumradius = (1/(6V)) [ P ( P - a d ) ( P - b e ) ( P - c f ) ] 1/2

W + X + Y + Z = 3V/r    and

-W + X + Y + Z = 3V/r1
W  - X + Y + Z = 3V/r2
W + X  - Y + Z = 3V/r3
W + X + Y  - Z = 3V/r4

Data Registers:              R00 = 3 V                  ( Registers R01 thru R06 are to be initialized before executing "THVR" )

•  R01 = a       •  R04 = d       R07 = r1     R09 = r3       R11 thru R13:  temp
•  R02 = b       •  R05 = e       R08 = r2     R10 = r4        R14 = r
•  R03 = c       •  R06 = f
Flags: /
Subroutines: /

 01  LBL "THVR"   02  RCL 01    03  X^2   04  STO 08   05  RCL 06          06  X^2   07  -   08  RCL 02    09  X^2   10  STO 09   11  ST+ Y   12  RCL 04   13  X^2   14  -   15  RCL 03   16  X^2   17  STO 10   18  +   19  STO 07   20  RCL 08   21  LASTX   22  +   23  RCL 05   24  X^2   25  -   26  STO 00   27  *   28  X<>Y   29  RCL 10   30  *   31  - 32  *   33  RCL 09    34  RCL 10          35  *   36  4   37  *   38  RCL 07    39  X^2   40  -   41  RCL 08   42  *   43  +   44  RCL 00   45  RCL 02   46  *   47  X^2   48  -   49  SQRT   50  4   51  /   52  STO 00   53  RCL 04   54  RCL 05   55  RCL 06   56  XEQ 00   57  STO 10   58  RCL 02   59  RCL 03   60  RCL 04   61  XEQ 00   62  STO 11 63  RCL 01   64  RCL 03    65  RCL 05          66  XEQ 00   67  STO 12   68  RCL 01    69  RCL 02    70  RCL 06   71  XEQ 00   72  STO 13   73  GTO 01   74  LBL 00   75  STO 13   76  X<>Y   77  ST+ 13   78  X<> Z   79  ST+ 13   80  2   81  ST/ 13   82  X<> 13   83  ST- Y   84  ST- Z   85  ST- T   86  *   87  *   88  *   89  CHS   90  SQRT   91  RTN   92  LBL 01   93  RCL 00 94  X<>Y   95  RCL 10    96  RCL 11          97  +   98  +   99  RCL 12  100  + 101  / 102  STO 14 103  CLX 104  RCL 11 105  RCL 12 106  + 107  RCL 13 108  + 109  RCL 10 110  - 111  / 112  STO 07 113  CLX 114  RCL 10 115  RCL 11 116  - 117  RCL 12 118  + 119  RCL 13 120  + 121  / 122  STO 08 123  CLX 124  RCL 10 125  RCL 11  126  + 127  STO 09        128  RCL 12  129  ST+ 09 130  - 131  RCL 13  132  ST- 09 133  + 134  / 135  X<> 09 136  / 137  STO 10 138  RCL 01 139  RCL 04 140  * 141  RCL 02 142  RCL 05 143  * 144  RCL 03 145  RCL 06 146  * 147  XEQ 00 148  2 149  / 150  RCL 14 151  RCL 00 152  ST/ Z 153  3 154  / 155  END

( 188 bytes / SIZE 015 )

 STACK INPUTS OUTPUTS Z / R Y / r X / Volume

---Execution time = 8 seconds---

Example:    a = 3   b = 5   c = 7   d = 6   e = 8   f = 4

3  STO 01     6  STO 04
5  STO 02     8  STO 05
7  STO 03     4  STO 06

XEQ "THVR"  >>>>   V = 8.426149777           Volume
RDN    r  = 0.591887583           Insphere
RDN   R =  4.350408756          Circumsphere

and the radii of the 4 exspheres

R07 = 1.298308607 = r1
R08 = 1.898591600 = r2
R09 = 1.153025424 = r3
R10 = 0.823182564 = r4

Notes:

-Lines 56-61-66-71-147 may be replaced by  XEQ "HERON"
-In this case, delete lines 73 to 92.

2°)  Dihedral Angles

a)  Dihedral Angles

-Let be A , B , C , D , E , F the 6 dihedral angles corresponding to the edges  SA , SB , SC , BC , AC , AB.
-With the same notations as above, we have:

W2 + X2 - 2 W.X Cos D = Y2 + Z2 - 2 Y.Z Cos A = [ 4 a2d2 - ( b2 - c2 + e2 - f2 )2 ] / 16
W2 + Y2 - 2 W.Y Cos E = Z2 + X2 - 2 Z.X  Cos B = [ 4 b2e2 - ( c2 - a2 + f2 - d2 )2 ] / 16
W2 + Z2 - 2 W.Z  Cos F = X2 + Y2 - 2 X.Y Cos C = [ 4 c2f2 - ( a2 - b2 + d2 - e2 )2 ] / 16

Data Registers:              R00 = W                        ( Registers R01 thru R06 are to be initialized before executing "THDA" )

•  R01 = a       •  R04 = d          R07 = A     R10 = D       R13 = X
•  R02 = b       •  R05 = e          R08 = B     R11 = E        R14 = Y
•  R03 = c       •  R06 = f           R09 = C     R12 = F        R15 = Z
Flags: /
Subroutine:  "HERON"   ( cf "Héron's Formula and its Generalization for the HP-41" )

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

( 175 bytes / SIZE 016 )

 STACK INPUT OUTPUT X / A

---Execution time = 12 seconds---

Example:      a = 3   b = 5   c = 7   d = 6   e = 8   f = 4

3  STO 01     6  STO 04
5  STO 02     8  STO 05
7  STO 03     4  STO 06

XEQ "THDA"  >>>>   A = 37°45260641 = R07  and

R08 = B = 134°2207078
R09 = C =  35°39909117
R10 = D =  26°36558508
R11 = E = 123°1336864
R12 = F =  46°48611259

Notes:

-You will get these results if your HP-41 is in DEG mode.
-"THDA" works in all angular modes.

b)  Volume + Dihedral Angles

-The program above may be completed to get the volume of the tetrahedron by the following formula:

V2 = (2/9) X.Y.Z ( 1 - 2 Cos A Cos B Cos C - Cos2 A - Cos2B - Cos2 C )

Data Registers:              R00 = Volume                ( Registers R01 thru R06 are to be initialized before executing "THVDA" )

•  R01 = a       •  R04 = d          R07 = A     R10 = D       R13 = X     R16 = W    R17: temp
•  R02 = b       •  R05 = e          R08 = B     R11 = E        R14 = Y
•  R03 = c       •  R06 = f           R09 = C     R12 = F        R15 = Z
Flags: /
Subroutine:  "HERON"   ( cf "Héron's Formula and its Generalization for the HP-41" )

 01  LBL "THVDA"   02  RCL 02   03  RCL 03   04  RCL 04   05  XEQ "HERON"   06  STO 13    07  RCL 01   08  RCL 03   09  RCL 05   10  XEQ "HERON"   11  STO 14    12  RCL 01   13  RCL 02   14  RCL 06   15  XEQ "HERON"   16  STO 15   17  RCL 04   18  RCL 05   19  RCL 06   20  XEQ "HERON"   21  STO 16    22  RCL 03   23  X^2   24  RCL 01   25  X^2   26  -   27  RCL 06   28  X^2   29  +   30  RCL 04   31  X^2   32  - 33  X^2   34  RCL 02   35  RCL 05    36  *   37  ST+ X   38  X^2   39  -   40  16   41  /   42  STO 12   43  RCL 13    44  RCL 15               45  XEQ 01   46  STO 08   47  LASTX   48  STO 00   49  X^2   50  STO 17   51  RCL 12   52  RCL 14   53  RCL 16    54  XEQ 01   55  STO 11   56  RCL 01   57  X^2   58  RCL 02   59  X^2   60  -   61  RCL 04   62  X^2   63  +   64  RCL 05 65  X^2   66  -   67  X^2   68  RCL 03    69  RCL 06   70  *   71  ST+ X   72  X^2   73  -   74  16   75  /   76  STO 12               77  RCL 13   78  RCL 14   79  XEQ 01   80  STO 09   81  LASTX   82  ST* 00   83  X^2   84  ST+ 17   85  RCL 12    86  RCL 15   87  RCL 16   88  XEQ 01   89  STO 12   90  RCL 02   91  X^2   92  RCL 03   93  X^2   94  -   95  RCL 05   96  X^2 97  +   98  RCL 06    99  X^2 100  - 101  X^2 102  RCL 01 103  RCL 04 104  * 105  ST+ X 106  X^2 107  - 108  16 109  / 110  STO 10  111  RCL 14 112  RCL 15             113  XEQ 01 114  STO 07 115  LASTX 116  ST* 00 117  X^2 118  ST+ 17 119  RCL 10  120  RCL 13 121  RCL 16 122  XEQ 01 123  STO 10 124  GTO 02 125  LBL 01 126  STO T 127  X^2 128  X<>Y 129  ST* T 130  X^2 131  + 132  + 133  X<>Y 134  ST+ X 135  / 136  ACOS 137  RTN 138  LBL 02 139  SIGN 140  RCL 00  141  ST+ X 142  - 143  RCL 17             144  - 145  SQRT 146  RCL 13 147  RCL 14 148  RCL 15  149  * 150  * 151  ST+ X 152  * 153  SQRT 154  3 155  / 156  STO 00 157  END

( 225 bytes / SIZE 018 )

 STACK INPUT OUTPUT X / V

---Execution time = 14 seconds---

Example:      a = 3   b = 5   c = 7   d = 6   e = 8   f = 4

3  STO 01     6  STO 04
5  STO 02     8  STO 05
7  STO 03     4  STO 06

XEQ "THVDA"  >>>>   V = 8.426149767

R07 = A = 37°45260641
R08 = B = 134°2207078
R09 = C =  35°39909117
R10 = D =  26°36558508
R11 = E = 123°1336864
R12 = F =  46°48611259

Note:

-"THVDA" works in all angular modes.

3°)  Trihedral Angles

-The solid angle ( or trihedral angle )  S is given by the formula:

Tan (S/2) = 6.V / [ ( a.b ) c + ( b.c ) a + ( c.a ) b + abc ]   where  . = dot product and  a = SA , b = SB , c = SC

-The 3 other trihedral angles A , B , C  are computed by similar formulae but "THTA" changes the order of a , b , c , d , e , f in registers R01 thru R06.
-The original contents of these registers are restored at the end.

-The volume V of the tetrahedron is also calculated and stored in R00.

Data Registers:              R00 = Volume                     ( Registers R01 thru R06 are to be initialized before executing "THTA" )

•  R01 = a       •  R04 = d          R07 = S          R08 = A           R09 = B       R10 = C
•  R02 = b       •  R05 = e
•  R03 = c       •  R06 = f
Flags: /
Subroutine:  "THV"   ( cf "Héron's Formula and its Generalization for the HP-41" paragraph 2°-a) or this page paragraph 0 )

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

( 102 bytes / SIZE 011 )

 STACK INPUTS OUTPUTS T / C Z / B Y / A X / S

---Execution time = 12 seconds---

Example:    a = 3   b = 5   c = 7   d = 6   e = 8   f = 4

3  STO 01     6  STO 04
5  STO 02     8  STO 05
7  STO 03     4  STO 06

XEQ "THTA"  >>>>   S = 27°07240548 = R07
RDN   A = 27°07240548 = R08
RDN   B = 27°07240548 = R09
RDN   C = 4°898362738 = R10

and   R00 = V = 8.426149775

Notes:

-"THTA" works in all angular modes.
-It stops at line 16.

-We always have:     2 x SUM ( dihedral angles ) - SUM ( trihedral angles ) = 720°

4°)  Random Tetrahedra

-You specify 2 integers N & M, and your HP-41 returns a tetrahedron
with integer edge lengths a , b , c  between  N and M  ( exclusive )
and integer  d , e , f  such that the tetrahedron does exist.

-Place a random seed in R00 before executing "RANT"

Data Registers:          •   R00 = Random seed                          ( Register R00 is to be initialized before executing "RANT" )

R01 = a         R04 = d          R07 to R09: temp
R02 = b         R05 = e
R03 = c         R06 = f
Flags: /
Subroutine:  "THV"   ( cf paragraph 0 above )

 01  LBL "RANT"  02  X>Y?  03  X<>Y  04  1  05  +  06  STO 07  07  -  08  STO 08   09  LBL 01  10  6  11  STO 09         12  RCL 07  13  RCL 08  14  XEQ 00  15  STO 01  16  RCL 07  17  RCL 08 18  XEQ 00  19  STO 02  20  RCL 07  21  RCL 08  22  XEQ 00  23  STO 03  24  RCL 02   25  ST+ Y  26  RCL 03         27  -  28  ABS  29  1  30  +  31  STO Z  32  -  33  XEQ 00  34  STO 04 35  RCL 03  36  RCL 01  37  ST+ Y  38  RCL 03  39  -  40  ABS  41  1  42  +  43  STO Z  44  -  45  XEQ 00  46  STO 05   47  RCL 01         48  RCL 02  49  +  50  RCL 04  51  RCL 05 52  +  53  X>Y?  54  X<>Y  55  RCL 01  56  RCL 02   57  -  58  ABS  59  RCL 04  60  RCL 05         61  -  62  ABS  63  X>Y?  64  X<>Y  65  SIGN  66  +  67  STO Z  68  - 69  LBL 00  70  RCL 00  71  R-D  72  FRC  73  STO 00   74  *  75  INT  76  +  77  DSE 09  78  RTN  79  STO 06         80  XEQ "THV"  81  X<0?  82  GTO 01  83  END

( 113 bytes / SIZE 010 )

 STACK INPUT OUTPUT Y N / X M V

With     N < M - 1

Example:    random seed = 1   N = 10  M = 100

1   STO 00

10   ENTER^
100  XEQ "RANT"  >>>>   V = 37246.9581               ---Execution time = 12s---

and we find in registers R01 to R06   ( a  b  c  d  e  f )  =  ( 47  60  86  115  88  86 )

Notes:

-The edges lengths  d  e  f  are not always between  N & M
-After calculating "random edges lengths" satisfying all the triangle inequalities,  "RANT"  calls "THV"
-If the volume is "negative" - in fact imaginary - another tetrahedron is computed until V > 0

5°)  A few Heron Tetrahedra

a) Program#1

-Many formulae may be found in reference [5] to get "Heronian" tetrahedra, i-e whose edges lengths, surface areas and volume are integers

"HERT" employs one of these formulae, where p is a positive integer,  p > 2

a = d = ( p2 + 25 ) ( 2 p2 + 1 ) ( 16 p4 + 9 p2 + 25 )
b = e = 2 ( p2 - 3 ) ( p2 + 4 ) ( 65 p4 + 58 p2 + 25 )
c = f = 7 ( p2 + 1 ) ( 9 p2 + 1 ) ( 2 p4 + 2 p2 + 25 )

Data Registers:              R00 = unused

R01 = a         R04 = d = a        R07 = Volume
R02 = b         R05 = e = b
R03 = c         R06 = f = c
Flags: /
Subroutine:  "THV"  ( cf paragraph 0 above )

 01  LBL "HERT"  02  X^2  03  STO 07  04  ST+ X  05  1  06  +  07  RCL 07         08  25  09  +  10  *  11  RCL 07  12  16  13  *  14  9 15  +  16  RCL 07  17  *  18  25  19  +  20  *  21  STO 01   22  STO 04         23  RCL 07  24  65  25  *  26  58  27  +  28  RCL 07 29  *  30  25  31  +  32  RCL 07   33  4  34  +  35  *  36  RCL 07         37  3  38  -  39  *  40  ST+ X  41  STO 02  42  STO 05 43  RCL 07  44  1  45  +  46  ST+ X  47  RCL 07  48  *  49  25  50  +  51  RCL 07         52  9  53  *  54  1  55  +  56  * 57  RCL 07  58  1  59  +  60  *  61  7  62  *  63  STO 03  64  STO 06   65  XEQ "THV"  66  STO 07  67  RCL 03         68  RCL 02  69  RCL 01  70  END

( 93 bytes / SIZE 008 )

 STACK INPUT OUTPUT T / V Z / c Y / b X p a

where  p > 2  is an integer

Example:     p = 7

7   XEQ "HERT"  >>>>   a = d = 284849532                                ---Execution time = 5s---
RDN   b = e = 774952432
RDN   c = f =  761897500
RDN   V = 9.717195725 E24

-Actually, the exact volume = 9717195754820025574502400

Note:

-Unfortunately, the edge-lengths rapidly become > E10 , so we only have approximate values of a , b , c

b) Program#2  ( Long Integers )

-Given an integer p > 1 , "LHERT" calculates the 6 edges a , b , c , d , e , f  with the formulas hereunder

a = 2p(p^4 + 2p^3 - 2p + 1)(p^12 + 4p^11 + 6p^10 + 4p^9 + 3p^8 + 16p^7 + 12p^6 - 16p^5 + 3p^4 - 4p^3 + 6p^2 - 4p + 1)
b = (p^2 + 1)(p^2 + 2p - 1)^2 (p^4 + 1) (p^8 + 2p^7 + 2p^6 + 6p^5 + 2p^4 - 6p^3 + 2p^2 - 2p + 1)
c = (p^2 + 1)(p^2 + 2p - 1) (p^4 - 4p^2 + 1) (p^4 + 2p^3 + 2p^2 - 2p + 1)(p^6 + 2p^5 + 3p^4 - 3p^2 + 2p - 1).

d = 4p(p + 1)(p - 1)(p^2 + 1)(p^2 + 2p - 1)(p^3 + p^2 + p - 1) (p^3 + p^2 - p + 1)(p^4 + 2p^3 - 2p + 1),
e = (p + 1)(p - 1)(p^3 + p^2 + p - 1)(p^3 + p^2 - p + 1) (p^5 + p^4 + 4p^2 - 3p + 1)(p^5 + 3p^4 + 4p^3 + p - 1),
f = (p + 1)^2 (p - 1)^2 (p^3 + p^2 + p - 1)(p^3 + p^2 - p + 1) (p^4 + 4p^2 - 4p + 1)(p^4 + 4p^3 + 4p^2 + 1)

-The results are stored by groups of 4 digits
-When the program stops, R01 thru R06 contain the control numbers of the 6 edges a , b , c , d , e , f

Data Registers:              R00 temp

R01 = bbb.eee(a)         R04 = bbb.eee(d)          R07 .....
R02 = bbb.eee(b)         R05 = bbb.eee(e)
R03 = bbb.eee(c)         R06 = bbb.eee(f)

Flags: /
Subroutines:  /

 01  LBL "LHERT"   02  CLRG   03  STO 01   04  9.008   05  STO 00   06   E4   07  STO 07   08  SIGN   09  XEQ 00   10  6   11  XEQ 00   12  15   13  XEQ 00   14  20   15  XEQ 00   16  CLX   17  XEQ 00   18  56   19  CHS   20  XEQ 00   21  64   22  CHS   23  XEQ 00   24  28   25  XEQ 00   26  78   27  XEQ 00   28  4   29  XEQ 00             30  78   31  CHS   32  XEQ 00   33  28   34  XEQ 00   35  64   36  XEQ 00   37  56   38  CHS   39  XEQ 00   40  CLX   41  XEQ 00   42  20   43  XEQ 00   44  15   45  CHS   46  XEQ 00   47  6   48  XEQ 00   49  1   50  ST- IND 00   51  RCL IND 00   52  X<0?   53  XEQ 02   54  RCL 00   55  STO 06 56  XEQ 04   57  1   58  XEQ 00   59  6   60  XEQ 00   61  15   62  XEQ 00   63  20   64  XEQ 00   65  16   66  XEQ 00   67  8   68  XEQ 00   69  16   70  CHS   71  XEQ 00   72  36   73  CHS   74  XEQ 00   75  18   76  CHS   77  XEQ 00   78  4   79  XEQ 00   80  18   81  XEQ 00   82  36   83  CHS   84  XEQ 00             85  16   86  XEQ 00   87  8   88  XEQ 00   89  16   90  CHS   91  XEQ 00   92  20   93  XEQ 00   94  15   95  CHS   96  XEQ 00   97  6   98  XEQ 00   99  1 100  ST- IND 00 101  RCL IND 00 102  X<0? 103  XEQ 02 104  RCL 00 105  STO 05 106  XEQ 04 107  4 108  XEQ 00 109  24 110  XEQ 00 111  48 112  XEQ 00 113  24 114  XEQ 00 115  40 116  CHS 117  XEQ 00 118  56 119  CHS 120  XEQ 00 121  16 122  CHS 123  XEQ 00 124  8 125  XEQ 00 126  CLX 127  XEQ 00 128  8 129  XEQ 00 130  16 131  XEQ 00 132  56 133  CHS 134  XEQ 00 135  40 136  XEQ 00 137  24 138  XEQ 00           139  48 140  CHS 141  XEQ 00 142  24 143  XEQ 00 144  4 145  CHS 146  XEQ 00 147  RCL 00 148  STO 04 149  XEQ 04 150  1 151  XEQ 00 152  6 153  XEQ 00 154  13 155  XEQ 00 156  4 157  XEQ 00 158  44 159  CHS 160  XEQ 00 161   E2 162  CHS 163  XEQ 00 164  84 165  CHS 166  XEQ 00 167  4 168  XEQ 00 169  50 170  XEQ 00 171  CLX 172  XEQ 00 173  50 174  XEQ 00 175  4 176  CHS 177  XEQ 00 178  84 179  CHS 180  XEQ 00 181   E2 182  XEQ 00 183  44 184  CHS 185  XEQ 00 186  4 187  CHS 188  XEQ 00 189  13 190  XEQ 00 191  6 192  CHS 193  XEQ 00           194  1 195  ST+ IND 00 196  RCL IND 00 197  RCL 07 198  X<=Y? 199  XEQ 02 200  RCL 00 201  STO 03 202  XEQ 04 203  1 204  XEQ 00 205  6 206  XEQ 00 207  13 208  XEQ 00 209  20 210  XEQ 00 211  36 212  XEQ 00 213  28 214  XEQ 00 215  4 216  CHS 217  XEQ 00 218  20 219  XEQ 00 220  18 221  XEQ 00 222  CLX 223  XEQ 00 224  18 225  XEQ 00 226  20 227  CHS 228  XEQ 00 229  4 230  CHS 231  XEQ 00 232  28 233  CHS 234  XEQ 00 235  36 236  XEQ 00 237  20 238  CHS 239  XEQ 00 240  13 241  XEQ 00 242  6 243  CHS 244  XEQ 00 245  1 246  ST+ IND 00 247  RCL IND 00 248  RCL 07 249  X<=Y? 250  XEQ 02 251  RCL 00           252  STO 02 253  XEQ 04 254  2 255  XEQ 00 256  12 257  XEQ 00 258  28 259  XEQ 00 260  28 261  XEQ 00 262  8 263  XEQ 00 264  28 265  XEQ 00 266  84 267  XEQ 00 268  12 269  XEQ 00 270  116 271  CHS 272  XEQ 00 273  12 274  CHS 275  XEQ 00 276  84 277  XEQ 00 278  28 279  CHS 280  XEQ 00 281  8 282  XEQ 00 283  28 284  CHS 285  XEQ 00 286  28 287  XEQ 00 288  12 289  CHS 290  XEQ 00 291  2 292  XEQ 00 293  RCL 00 294  STO 01 295  6 296  STO 07 297  GTO 10 298  LBL 00 299  ST+ IND 00 300  RCL 00 301  RCL 01 302  LBL 01 303  ST* IND Y 304  DSE Y 305  GTO 01 306  RCL 00           307  FRC 308   E3 309  * 310  SIGN 311  CLX 312  STO IND L 313  LBL 02 314  RCL 00 315  ENTER^ 316  DSE X 317  LBL 03 318  RCL IND Y 319  RCL 07 320  MOD 321  ENTER^ 322  X<> IND T 323  X<>Y 324  - 325  RCL 07 326  / 327  ST+ IND Y 328  CLX 329  SIGN 330  - 331  DSE Y 332  GTO 03 333  X<>Y 334  INT 335  RCL IND X 336  X=0? 337  RTN 338  CLX 339  RCL 00 340  INT 341  1 342  + 343  RCL Y 344  - 345   E6 346  / 347  RCL Y 348  1 349  + 350   E3 351  / 352  + 353  + 354  REGMOVE 355  SIGN 356  ST+ 00 357  RTN 358  LBL 04           359  INT 360  1 361  + 362  STO Y 363   E3 364  / 365  + 366  1 367  + 368  STO 00 369  RTN 370  LBL 10 371  RCL IND 07 372  INT 373  LASTX 374  FRC 375   E3 376  ST/ Z 377  * 378  + 379  1 380  + 381  STO IND 07 382  DSE 07 383  GTO 10 384  END

( 737 bytes / SIZE ??? )

 STACK INPUT OUTPUT X p bbb.eee(a)

Where  p  is an integer  1 < p < 10000

Example:     p = 234

234   XEQ   "LHERT"   >>>>   69.079                         ---Execution time = 9m29s---

R01 = 69.079       R04 = 33.043
R02 = 57.067       R05 = 21.031
R03 = 45.055       R06 =  9.019

-We find

R69 = 3   R70 = 8797    R71 = 4935   R72 = 7367   R73 = 2970   R74 = 6049   R75 = 9176   R76 = 2143   R77 = 798   R78 = 4873   R79 = 3892

Whence  a = 38797493573672970604991762143079848733892    ( add zeros on the left if there are less than 4 digits: read  R77 = 0798 )

-Likewise:

b = 4539228059547741416707179684330872726594233           R57 thru R67
c = 4539222415350617449572046369482903812700217           R45 thru R55
d =     77592176903527612114094036950894833445560           R33 thru R43
e = 4539389645667656502320511122916828671774015           R21 thru R31
f =  4539389621650236893157740238374801941709375           R09 thru R19

Notes:

-If  p < 10000 , SIZE 122 is enough.
-"LHERT" should also work if p is a little > 10000
-I let you check that the faces areas and the volume are integers too...

6°)  Generating Integer Tetrahedra

-Here, you specify  a , b , c  and  "ITH" searches for integers  d , e , f  that produce a tetrahedron with an integer volume V
-Then, it returns - if any - the integer volume V  corresponding to the edges lengths  ( a , b , c, d , e , f )

Data Registers:              R00 = 4 b2 c2

R01 = a         R04 = d          R07 = a2 + b2         R10 = max(d) + 1           R13 = min(e)
R02 = b         R05 = e          R08 = a2 + c2         R11 = max(e) + 1           R14 = 12
R03 = c         R06 = f           R09 = b2 + c2         R12 = max(f) + 1            R15 = 1
Flags: /
Subroutine:  /

 01  LBL "ITH"   02  STO 03   03  X^2   04  STO 08   05  X<>Y   06  STO 02    07  X^2   08  STO 07   09  +   10  STO 09   11  X<>Y   12  STO 01   13  X^2   14  ST+ 07   15  ST+ 08   16  RCL 02   17  RCL 03        18  *   19  ST+ X   20  X^2   21  STO 00   22  RCL 02   23  RCL 03   24  +   25  STO 10   26  RCL 02   27  RCL 03   28  -   29  ABS 30  1   31  STO 15   32  +   33  STO 04   34  RCL 01   35  RCL 03    36  -   37  ABS   38  RCL 15   39  +   40  STO 05   41  STO 13   42  RCL 01   43  RCL 03   44  +   45  STO 11   46  12   47  STO 14        48  LBL 01   49  RCL 01   50  RCL 02   51  -   52  ABS   53  RCL 04   54  RCL 05   55  -   56  ABS   57  XY 59  RCL 15   60  +   61  STO 06   62  RCL 01   63  RCL 02    64  +   65  RCL 04   66  RCL 05   67  +   68  XY   70  RDN   71  XY? 123  GTO 02 124  LBL 03 125  RCL 05 126  RCL 15 127  + 128  STO 05 129  RCL 11 130  X>Y? 131  GTO 01 132  RCL 13 133  STO 05 134  RCL 04 135  RCL 15      136  + 137  STO 04 138  RCL 10 139  X>Y? 140  GTO 01 141  PI 142  BEEP 143  END

( 165 bytes / SIZE 016 )

 STACK INPUTS OUTPUT Z a / Y b / X c V

When a solution is found, press  R/S  to search another one.

Example:      a = 13   b = 16   c = 18

13  ENTER^
16  ENTER^
18  XEQ "ITH"  >>>>   ( TONE 9 )    V = 84                    ---Execution time = 17mn32s---

and we find   R04 = 6  ,  R05 = 30  ,  R06 = 27

-So, the tetrahedron  ( 13 , 16 , 18 , 6 , 30 , 27 )  has a volume = 84

-Then press R/S to find another integer tetrahedron, it yields:   ( with a good emulator )  V = 336

corresponding to  ( 13 , 16 , 18 , 22 , 19 , 27 )

>>>  4 other integer tetrahedra will be found - all with V = 336

-When there is no other solution, the HP-41 executes a BEEP and returns PI in X-register.

Notes:

-An emulator in turbo mode is almost indispensable, unless a , b , c  are very small.
-Otherwise, the executions times would be prohibitive...
-If one or several calculations involve number > 1010 , roundoff-errors may produce a wrong solution or miss a true solution

-Another example:  ( 4 5 6 2 8 7 )  V = 6  and a last one:  ( 41 , 64 , 71 , 29 , 57 , 49 )  gives an integer volume  V = 9702

>>> If you want to store 4 a2 b2 c2 in R00,  replace lines 81 to 85 by the 4 lines:

RCL 01        and lines  16 to 21  by                              RCL 01         *          X^2
*                                                                              RCL 02         *        STO 00
X^2                                                                           RCL 03     ST+ X
-

the 1st example will be found in 16m53s instead of 17mn32s, but the example above - with V = 9702 - will not be found because of roundoff-errors !

References:

[1]  Georges Dostor - "Rayon de la sphère circonscrite au tétraèdre en fonction des arêtes"
[2]  E. Catalan - "Note sur les sphères tangentes à 4 plans donnés"
[3]  McConnell - "Pseudofaces of Tetrahedra"
[4]  http://planetmath.org/SolidAngle.html
[5]  C. Chisholm, J.A. MacDougall - Rational and Heron tetrahedra.