toconic
Previous  Next

int toconic(FLOAT p0[3], FLOAT p1[3], FLOAT p2[3], FLOAT p3[3], FLOAT p4[3],
     FLOAT *a, FLOAT *b, FLOAT *c, FLOAT *d, FLOAT *e, FLOAT *f)

/* Code to find the equation of a conic */
/*               Tom Davis              */
/*             April 12, 1996           */

/* toconic takes five points in homogeneous coordinates, and returns the
* coefficients of a general conic equation in a, b, c, ..., f:
*
* a*x*x + b*x*y + c*y*y + d*x + e*y + f = 0.
*
* The routine returns 1 on success; 0 otherwise.  (It can fail, for
* example, if there are duplicate points.
*
* Typically, the points will be finite, in which case the third (w)
* coordinate for all the input vectors will be 1, although the code
* deals cleanly with points at infinity.
*
* For example, to find the equation of the conic passing through (5, 0),
* (-5, 0), (3, 2), (3, -2), and (-3, 2), set:
*
* p0[0] =  5, p0[1] =  0, p0[2] = 1,
* p1[0] = -5, p1[1] =  0, p1[2] = 1,
* p2[0] =  3, p2[1] =  2, p2[2] = 1,
* p3[0] =  3, p3[1] = -2, p3[2] = 1,
* p4[0] = -3, p4[1] =  2, p4[2] = 1.
*
* But if you want the equation of the hyperbola that is tangent to the
* line 2x=y at infinity,  simply make one of the points be the point at
* infinity along that line, for example:
*
* p0[0] = 1, p0[1] = 2, p0[2] = 0.
*/