The Museum of HP Calculators


Conics for the HP-41

This program is Copyright © 2005 by Jean-Marc Baillard and is used here by permission.

This program is supplied without representation or warranty of any kind. Jean-Marc Baillard and The Museum of HP Calculators therefore assume no responsibility and shall have no liability, consequential or otherwise, of any kind arising from the use of this program material or any part thereof.

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 )        with a >= b            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  ------------- a parabola
             F03  ------------- a hyperbola

Subroutines:  /
 
 

Program Listing
 

  01  LBL "CONIC"
  02  CF 01                          If you have an HP-41CX, lines 02-03-04 may be replaced by    CLX   X<> F
  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            ( a three-byte GTO )
  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?                      Lines 93 to 100 are only useful to produce a DATA ERROR line 96  if the conic is imaginary ( like x2+4y2+9=0 )
  94  X<>Y                     Otherwise, these lines may be deleted.
  95  CHS
  96  LN
  97  X<> L
  98  CHS
  99  X<Y?
100  X<>Y
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          ( a three-byte GTO )
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            ( a three-byte GTO )
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...

Go back to the HP-41 software library
Go back to the general software library
Go back to the main exhibit hall