# hp41programs

Conics Conics for the HP-41

Overview

-A conic (C) may be defined by its cartesian equation:      A.x2 + B.xy + C.y2 + D.x + E.y + F = 0

-Knowing these 6 coefficients, the following program determines the specifications of the curve, namely:

e = eccentricity,
p = parameter,
a & b = semi-major & semi-minor axis ( ellipse and hyperbola )
C = center ( except for a parabola )
F & F' = focuses ( only F for a parabola )
(Ax) & (Ax') = Axis of symmetry ( only (Ax) for a parabola )
(D) & (D') =directrices ( only (D) for a parabola )
V, V' , V" , V''' = vertices ( only  V , V'  for a hyperbola, only V for a parabola )
(As) & (As') = asymptotes ( for a hyperbola only )

-A rotation by an angle µ is performed to eliminate the term in "xy", and a translation leads to the standard expressions:

x2/a2 + y2/b2 = 1   ( ellipse )                  0 <= e < 1         ( e = 0  and a = b  if (C) is a circle )
y2 = 2px               ( parabola )                        e = 1
x2/a2 - y2/b2 = 1   ( hyperbola )                      e > 1

(Ax')
(D)                               |                                 (D')
|                                *|V'''                              |
|                 *               |             *                    |
|          *                      |                     *            |
-|---V-*--F----------C |-----------F'--*-V'--- |--(Ax)                    ELLIPSE
|          *                      |                     *            |
|                  *              |             *                    |
|                                *| V''                              |

(D)                                             *
|                        *
|            *
|        *
-|---V*---F------------------------------------ (Ax)                       PARABOLA
|        *
|             *
|                        *
*

(D)    (D')
(As) |(Ax')   (As')
*   \    |   |  |      /  *
*   \  |   |  |    /  *
*   \|   |  |  /  *
*   |\  |  |/   *
-------------F- *V|-\|/-|V'*---F'-------------------(Ax)                  HYPERBOLA
*   |  /|\ |    *
*    |/  |  |\    *
*   / |   |  |  \   *
*   /   |   |  |    \   *
|      |

-We assume the basis is orthonormal.
-The "degenerate" cases ( one point, one or two straight lines ) are not taken into account ( for example if A = B = C = 0 ).

Data Registers:     R00:  µ   ( the rotation angle )
•  R01 = A   •  R02 = B  •  R03 = C  •  R04 = D  •  R05 = E  •  R06 = F   ( these 6 registers are to be initialized before executing "CONIC" )

-when the program stops, the specifications of the conic are stored in registers R07 to R34 as shown in the examples below.

Flags:  F01  is set if (C) is an ellipse
F02  is set if (C) is a parabola
F03  is set if (C) is a hyperbola

Subroutines:  /

Program Listing

-If you have an HP-41CX, lines 02-03-04 may be replaced by    CLX   X<> F
-Line 43 is a three-byte GTO 03
-Lines 93 to 100 are only useful to produce a DATA ERROR line 96  if the conic is imaginary ( like x2+4y2+9=0 ). Otherwise, these lines may be deleted.
-Lines 193-225 are three-byte GTO 04

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

( 448 bytes / SIZE 035 )

 STACK INPUTS OUTPUTS Y / p X / e

-Execution time = 9 seconds

Example1:    (C):  29.x2 + 24.xy + 36.y2 - 98.x - 264.y + 305 = 0

-Store  29  24  36  -98  -264  305  into registers  R01 R02 R03 R04 R05 R06 respectively

and  XEQ "CONIC"   >>>>    e = 0.7454 = R07    the conic is an ellipse ( F01 is set )
X<>Y    p = 1.3333 = R08   and we have in registers  R09 thru R32

R09 = a = 3       R11 = 0.2            R12 = 3.6         the center is C(0.2;3.6)
R10 = b = 2       R13 = 1.9889      R14 = 2.2584   focus F(1.9889;2.2584)
R15 = -1.5889    R16 = 4.9416   focus F'(-1.5889;4.9416)

R17 = 0.6           R18 =  0.8         R19 = 3        Axis (Ax):  0.6 x + 0.8 y = 3
R20 = 0.8           R21 = -0.6        R22 = -2       Axis (Ax'): 0.8 x - 0.6 y = -2                     (Ax) and (Ax') are always perpendicular.

R23 =   2.0249  directrix (D):  0.8 x - 0.6 y =  2.0249
R24 = -6.0249   directrix (D'): 0.8 x - 0.6y = -6.0249       we always have:   (Ax') // (D) // (D')

R25 =   2.6     R26 = 1.8    vertex  V(2.6;1.8)
R27 = -2.2     R28 = 5.4    vertex  V'(-2.2;5.4)
R29 =  1.4     R30 = 5.2    vertex  V"(1.4;5.2)
R31 =  -1      R32 =  2      vertex  V'''(-1;2)

Example2:    (C):  17.x2 + 312.xy + 108.y2 - 1130.x - 840.y + 2525 = 0

-Store these 6 coefficients into registers R01 to R06

and   R/S    >>>>    e = 1.2019 = R07    the conic is a hyperbola ( F03 is set )
X<>Y    p = 1.3333 = R08   and we have in registers  R09 thru R34

R09 = a = 3       R11 = 0.2            R12 = 3.6         the center is C(0.2;3.6)
R10 = b = 2       R13 = 3.0844      R14 = 1.4367   focus F(3.0844;1.4367)
R15 = -2.6844    R16 = 5.7633   focus F'(-2.6844;5.7633)

R17 = 0.6           R18 =  0.8         R19 = 3        Axis (Ax):  0.6 x + 0.8 y = 3
R20 = 0.8           R21 = -0.6        R22 = -2       Axis (Ax'): 0.8 x - 0.6 y = -2                     (Ax) and (Ax') are always perpendicular.

R23 =   0.4962  directrix (D):  0.8 x - 0.6 y =  0.4962
R24 = -4.4962   directrix (D'): 0.8 x - 0.6y = -4.4962       we always have:   (Ax') // (D) // (D')

R25 =   2.6        R26 = 1.8    vertex  V(2.6;1.8)
R27 = -2.2        R28 = 5.4    vertex  V'(-2.2;5.4)

R29 = 0.0556   R30 =   1      R31 = 3.6111   Asymptote (As):  0.0556.x + y = 3.6111
R32 = 2.8333   R33 =   1      R34 = 4.1667   Asymptote (As'): 2.8333.x + y = 4.1667

Example3:    (C):  9.x2 + 24.xy + 16.y2 - 150.x - 75.y + 75 = 0

-Store these 6 coefficients into registers R01 thru R06

and   R/S    >>>>    e =   1  =  R07   the conic is a parabola   ( F02 is set )
X<>Y    p = 1.5 =  R08   and we have in registers  R09 thru R18

R09 = 0.2         R10 = 3.6         vertex  V(0.2;3.6)               ( a parabola has no center )
R11 = 0.8         R12 = 3.15       focus   F(0.8;3.15)

.     R13 = 0.6           R14 =  0.8         R15 = 3          Axis (Ax):    0.6 x + 0.8 y = 3
R16 = 0.8           R17 = -0.6        R18 = -2       Directrix (D):  0.8 x - 0.6 y = -2.75

Notes:

-In all these examples,  R00 = µ = Arc tan(-3/4) = -36.8699°
-If (C) is a sphere ( e = 0 ) this program yields 4 vertices but in fact, any point of the circle is a vertex.
Furthermore, in this case, the HP-41 produces y = + E99 and y = - E99  for the directrices:
(D) & (D') are regarded as "infinitely" far from the circle even if, strictly speaking, no directrix exists.
-If the conic is a hyperbola and C = 0 ( no term in y2 ), the asymptotes are given by different formulas - lines 226 to 249 -
because one of them is parallel to the y-axis.

for instance, with  12.x2 - 4.xy + 5.x + y + 3 = 0   we find in registers  R29 thru R34

-3   1     2       (As): -3.x + y = 2
and      1   0   0.25    (As'):   x = 1/4

-I let you add text lines at the end of the routine if you want more explicit outputs...