protected final void compute() {
    geoOut.set(geoIn);

    if (mirror == mirrorLine) out.mirror(mirrorLine);
    else if (mirror == mirrorPoint) out.mirror(mirrorPoint);
    else ((GeoPoint) geoOut).mirror(mirrorConic); // Michael Borcherds 2008-02-10
  }
  AlgoMirror(Construction cons, Mirrorable in, GeoLine g, GeoPoint p, GeoConic c) {
    super(cons);
    // this.in = in;
    mirrorLine = g;
    mirrorPoint = p;
    mirrorConic = c; // Michael Borcherds 2008-02-10

    if (g != null) mirror = g;
    else if (p != null) mirror = p;
    else mirror = c; // Michael Borcherds 2008-02-10

    geoIn = in.toGeoElement();
    out = (Mirrorable) geoIn.copy();
    geoOut = out.toGeoElement();
    setInputOutput();

    cons.registerEuclidianViewAlgo(this);

    compute();
  }