CoordTransformer t(400, 600); // Указываем в какую точку перенести начало координат.
Здесь получается F.derivate это просто найденное уравнение производной, F.evaluate и df.evaluate это вычисленное уравнение и производная, так? или я плохо догоняю?)
double findRoot(const Polynom& F, double x0)
{
static const size_t MAX_N_ITER = 10000;
static const double EPS = 1e-10;
auto dF = F.derivative();
for (size_t i = 0; i < MAX_N_ITER; ++i) {
double x1 = x0 - F.evaluate(x0) / dF.evaluate(x0);
if (abs(x1 - x0) < EPS) {
return x1;
}
x0 = x1;
}
// not enought iteration or divergence
throw std::logic_error("Number of iteration exceeded");
}
class Polynom
{
public:
Polynom()
{
/* your implementation here */
}
Polynom(std::vector<double> coefs)
{
/* your implementation here */
}
Polynom(const Polynom&) = default;
Polynom(Polynom&&) = default;
Polynom& operator=(const Polynom&) = default;
Polynom& operator=(Polynom&&) = default;
double evaluate(double x) const
{
/* your implementation here */
return 0;
}
Polynom derivative() const
{
/* your implementation here */
return {};
}
size_t getDegree() const {
/* your implementation here */
return 0;
}
friend std::ostream& operator<< (std::ostream& os, const Polynom& poly);
private:
};
std::ostream& operator<< (std::ostream& os, const Polynom& poly)
{
/* your implementation here */
return os;
}
Вообще написано в комментарии.
В примере указываем точку, куда нужно перенести начало СК (эта точка указывается относительно исходной SMFL-ной СК)
P.S.
Там может быть и ширина/высота окна. От этого идея применения преобразования координат не меняется.