@Override
  public void remove() {
    if (removed) return;
    super.remove();
    f.removeAlgorithm(algo);
    f.removeAlgorithm(cv);
    A.removeAlgorithm(algo);
    A.removeAlgorithm(cv);

    // make sure all AlgoCASDerivatives get removed
    cv.remove();
  }
  public AlgoOsculatingCircle(Construction cons, GeoPoint A, GeoFunction f) {
    super(cons);
    this.A = A;
    this.f = f;

    R = new GeoPoint(cons); // R is the center of the circle
    circle = new GeoConic(cons);

    // Catch curvature and curvature vector
    algo = new AlgoCurvature(cons, A, f);
    cv = new AlgoCurvatureVector(cons, A, f);
    curv = algo.getResult();
    v = cv.getVector();

    cons.removeFromConstructionList(algo);
    cons.removeFromConstructionList(cv);
    cons.removeFromAlgorithmList(algo);
    cons.removeFromAlgorithmList(cv);
    setInputOutput();
    compute();
  }