Overview
-A Quadric ( or quadratic surface ) is defined by its cartesian equation:
a.x2 + b.y2 + c.z2 + d.x.y + e.x.z + f.y.z
+ g.x + h.y + i.z = j
where at least one of the 6 coefficients a , b ,
c , d , e , f is different from zero.
-After a suitable transformation of coordinates, this equation is reduced
to one of the 17 standard forms:
1°) x2/a2 + y2/b2
+ z2/c2 = 1 Ellipsoid
2°) x2/a2 + y2/b2
- z2/c2 = 1 Hyperboloid of one
sheet
3°) x2/a2 - y2/b2
- z2/c2 = 1 Hyperboloid of
two sheets
4°) x2/a2 + y2/b2
= z
Elliptic Paraboloid
5°) x2/a2 - y2/b2
= z
Hyperbolic Paraboloid
6°) x2/a2 + y2/b2
- z2/c2 = 0 Cone
7°) x2/a2 + y2/b2
= 1
Elliptic Cylinder
8°) x2/a2 - y2/b2
= 1
Hyperbolic Cylinder
9°) x2/a2 =
y
Parabolic Cylinder
10°) -x2/a2 - y2/b2
- z2/c2 = 1 Imaginary Ellipsoid
11°) x2/a2 + y2/b2
+ z2/c2 = 0 One Point ( more
precisely an Imaginary Cone )
12°) -x2/a2 - y2/b2
= 1
Imaginary Elliptic Cylinder
13°) x2/a2 = 0
One Plane
14°) x2/a2 = 1
Two Parallel Planes
15°) -x2/a2 = 1
Two Imaginary Parallel Planes
16°) x2/a2 + y2/b2
= 0
One Straight-Line ( more precisely Two Imaginary Intersecting Planes )
17°) x2/a2 - y2/b2
= 0
Two Intersecting Planes
-The following program uses the Jacobi's iterating method to determine
these reduced equations and the type of the quadric.
Data Registers: R00: unused ( Registers R01 thru R10 are to be initialized before executing "QUADRIC" )
• R01 = a • R02 = b • R03 = c • R04
= d • R05 = e
• R06 = f • R07 = g • R08 = h
• R09 = i • R10 = j
When the program stops, the coefficients of the reduced form are in
R01 thru R10
Flags: /
Subroutines: /
-Line 121 is a three-byte GTO 04
01 LBL "QUADRIC"
02 LBL 01 03 VIEW 04 04 RCL 01 05 RCL 04 06 RCL 01 07 RCL 02 08 ST+ T 09 - 10 R-P 11 RDN 12 X<> 04 13 LASTX 14 R-P 15 X<>Y 16 RDN 17 ST- Z 18 + 19 2 20 ST/ 04 21 ST/ Z 22 / 23 STO 01 24 X<>Y 25 STO 02 26 RCL 04 27 RCL 07 28 P-R 29 RCL 04 30 RCL 08 31 P-R 32 R^ 33 - 34 STO 08 35 RDN 36 + 37 STO 07 38 RCL 04 39 RCL 05 40 P-R 41 RCL 04 42 RCL 06 43 P-R 44 R^ 45 - 46 STO 06 47 RDN 48 + 49 STO 05 50 R^ 51 R-P 52 E-8 53 X>Y? 54 GTO 03 55 LASTX |
56 ABS
57 RCL 05 58 ABS 59 X>Y? 60 GTO 02 61 RCL 01 62 X<> 03 63 STO 01 64 CLX 65 X<> 06 66 STO 04 67 RCL 07 68 X<> 09 69 STO 07 70 GTO 01 71 LBL 02 72 RCL 02 73 X<> 03 74 STO 02 75 CLX 76 X<> 05 77 STO 04 78 RCL 08 79 X<> 09 80 STO 08 81 GTO 01 82 LBL 03 83 CLX 84 STO 04 85 XEQ 05 86 RCL 01 87 X#0? 88 GTO 02 89 X<> 02 90 STO 01 91 RCL 07 92 X<> 08 93 STO 07 94 LBL 02 95 RCL 01 96 X#0? 97 GTO 02 98 X<> 03 99 STO 01 100 RCL 07 101 X<> 09 102 STO 07 103 LBL 02 104 RCL 02 105 X#0? 106 GTO 02 107 X<> 03 108 STO 02 109 RCL 08 110 X<> 09 |
111 STO 08
112 LBL 02 113 RCL 07 114 X^2 115 RCL 01 116 / 117 RCL 08 118 X^2 119 RCL 02 120 X=0? 121 GTO 04 122 / 123 + 124 RCL 09 125 X^2 126 RCL 03 127 X=0? 128 GTO 03 129 / 130 + 131 4 132 / 133 ST+ 10 134 CLX 135 STO 07 136 STO 08 137 STO 09 138 XEQ 05 139 RCL 10 140 X=0? 141 GTO 02 142 ST/ 01 143 ST/ 02 144 ST/ 03 145 ST/ 10 146 LBL 02 147 RCL 01 148 SIGN 149 RCL 02 150 SIGN 151 + 152 RCL 03 153 SIGN 154 + 155 RCL 10 156 X=0? 157 GTO 02 158 " IM ELLIPS" 159 SIGN 160 X=Y? 161 " 1-SH HYP" 162 X<Y? 163 " ELLIPSOID" 164 CHS 165 X=Y? |
166 " 2-SH HYP"
167 PROMPT 168 LBL 02 169 SIGN 170 X<>Y 171 ABS 172 " POINT" 173 X=Y? 174 " CONE" 175 PROMPT 176 LBL 03 177 X<> Z 178 4 179 / 180 ST+ 10 181 CLX 182 STO 07 183 STO 08 184 XEQ 05 185 RCL 01 186 RCL 02 187 * 188 RCL 09 189 X=0? 190 GTO 02 191 ST/ 01 192 ST/ 02 193 ST/ 09 194 CLX 195 STO 10 196 X<>Y 197 " ELL PARAB" 198 X<0? 199 " HYP PARAB" 200 PROMPT 201 LBL 02 202 CLX 203 RCL 10 204 X=0? 205 GTO 02 206 ST/ 01 207 ST/ 02 208 ST/ 10 209 X<>Y 210 " HYP CYL" 211 X<0? 212 PROMPT 213 RCL 01 214 " ELL CYL" 215 X<0? 216 " IM ELL CYL" 217 PROMPT 218 LBL 02 219 X<>Y 220 " STR LINE" |
221 X<0?
222 " 2 PLANES" 223 PROMPT 224 LBL 04 225 X<> Z 226 4 227 / 228 ST+ 10 229 CLX 230 STO 07 231 XEQ 05 232 RCL 08 233 RCL 09 234 R-P 235 X=0? 236 GTO 02 237 RCL 01 238 ST/ 01 239 / 240 STO 08 241 CLX 242 STO 09 243 STO 10 244 " PARAB CYL" 245 PROMPT 246 LBL 02 247 " PLANE" 248 RCL 10 249 X=0? 250 PROMPT 251 ST/ 01 252 ST/ 10 253 " 2 IM PLANES" 254 RCL 01 255 X>0? 256 " 2//PLANES" 257 PROMPT 258 LBL 05 259 1 260 10^X 261 E-7 262 LBL 06 263 RCL IND Y 264 ABS 265 X<Y? 266 CLX 267 X=0? 268 STO IND Z 269 RDN 270 DSE Y 271 GTO 06 272 END |
( 503 bytes / SIZE 011 )
STACK | INPUTS | OUTPUTS |
X | / | / |
Example1: (Q): 2xy + 3xz
+ 4yz = 7
0 STO 01 STO 02 STO 03 2
STO 04 3 STO 05 4 STO 06 0 STO 07
STO 08 STO 09 7 STO 10
XEQ "QUADRIC" the HP-41 displays the successive
contents of register R04 ( which tend to zero )
and eventually displays " 2-SH HYP" (Q) is an hyperboloid of 2 sheets
-Recalling the new coefficients in registers R01 thru R10 we find: 0.433905256 x2 - 0.299134471 y2 - 0.134770785 z2 = 1
which may be re-written: x2/a2 - y2/b2 - z2/c2 = 1 with a = 1.518107565 , b = 1.828381291 , c = 2.723968753
-The signs may be + - - ; - + - or - - + for a 2-sheeted hyperboloid.
Example2: (Q): 2x2 + y2 + 2z2 - 3xy + 4xz -3yz + 7x + y + 5z = 10
2 STO 01 1 STO 02 ................ 10 STO 10 XEQ "QUADRIC" >>>> " HYP PARAB" (Q) is an hyperbolic Paraboloid
and the new coefficients in R01 to R10 yield: -3.604884263 x2 + 0.069350354 y2 + z = 0
which may be re-written: x2/a2
- y2/b2 = z with a = 0.526689108
, b = 3.797306556
Remarks:
-The numbers displayed line 04 may seem to increase in the beginning,
but they soon tend to zero.
-Of course, execution time depends on the coefficients, but it's usually
less than 1 minute.
-When the program stops, R04 = R05 = R06 = 0
-There will be a DATA ERROR line 116 if a = b = c = d =
e = f = 0 ( the equation reduces to g.x + h.y + i.z = j )
-If you want to take this case into account, add the following instructions
after line 270
RTN LBL 07 RCL 07 RCL 08 R-P RCL
09 R-P " PLANE" X#0? PROMPT " EMPTY SET"
RCL 10 X=0? " SPACE" PROMPT
and add X=0? GTO 07 after line 115
-Practically, lines 158-216-253 may replaced with " EMPTY SET"
-Many bytes can be saved if you use more abbreviated alpha strings.
-Register R00 may be used instead of R10 but in this case, replace
line 269 by ISG Y and lines 259-260 by 9
CHS
-This program uses 10-7 ( line 261 ) to identify and delete
tiny elements.
-Change this value if, for instance, the coefficients are of the order
of 106 ( or divide them by 1 million )