// calc tangent at x=a
  public final void compute() {
    if (!(f.isDefined() && P.isDefined() && deriv.isDefined())) {
      tangent.setUndefined();
      return;
    }

    // calc the tangent;
    double a = P.inhomX;
    double fa = f.evaluate(a);
    double slope = deriv.evaluate(a);
    tangent.setCoords(-slope, 1.0, a * slope - fa);

    if (!pointOnFunction) T.setCoords(a, fa, 1.0);
  }
  // calc axes
  @Override
  public final void compute() {
    // only parabola has directrix
    if (c.type == GeoConicNDConstants.CONIC_PARABOLA) {
      // directrix has direction of second eigenvector
      // through point (b - p/2* eigenvec1)
      directrix.x = -eigenvec[1].getY();
      directrix.y = eigenvec[1].getX();
      double px = b.getX() - c.p / 2.0 * eigenvec[0].getX();
      double py = b.getY() - c.p / 2.0 * eigenvec[0].getY();
      directrix.z = -(directrix.x * px + directrix.y * py);

      P.setCoords(px, py, 1.0);
    } else directrix.setUndefined();
  }