This could be other focus, perhaps more algebraic . Just a draft:
class Function2D {
virtual double GetX(double y) {}; // Get the first value
virtual double GetY(double x) {};
virtual Array <double> GetX(double y) {}; // Get all values
virtual Array <double> GetY(double x) {};
};
class Line : public Function2D {
private:
Point p1, p2;
public:
Line(Point p1, Point p2) : p1(p1), p2(p2) {};
virtual double GetX(double y);
virtual double GetY(double x);
};
class Polynomial : public Function2D {
public:
Polynomial(Point p1, ...); // Polynomial defined by points
Polynomial(double coeff, ...); // Polynomial defined by coefficients
};
... other functions ...