Не могу корректно отрисовать график, выходит за границы экрана

Отрисовка графика диф. уравнения вручную(я не специально создаю велосипед, так надо по заданию) через QPainter

#include "chart.h"
#include "mainwindow.h"

Chart::Chart(QWidget *parent) : QWidget(parent)
{
    x0 = x = yx0 = y = C = 0;
    scale = 20; // масштаб клеток/отрезков
}

void Chart::paintEvent(QPaintEvent*){
    painter.begin(this);

    painter.setBackgroundMode(Qt::OpaqueMode);
    painter.setBackground(Qt::white);

    pen.setColor(Qt::gray);
    pen.setWidth(2);
    painter.setPen(pen);

    for(int i = 0; i < width(); i+=scale){
        painter.drawLine(i, 0, i, height());
        painter.drawLine(0, i, width(), i);
    }

    pen.setColor(QColor(220, 20, 60));
    pen.setWidth(3);
    painter.setPen(pen);

    painter.drawLine(width()/2, 0, width()/2, height()); // ось Y

    QPolygon arrowY;
    arrowY << QPoint(width()/2, 0) << QPoint((width()/2)-20, 20); //левая часть стрелки
    arrowY << QPoint(width()/2, 0) << QPoint((width()/2)+20, 20); //правая часть стрелки
    painter.drawPolygon(arrowY);

    painter.drawLine(0, (height()/2), width(), (height()/2)); // ось X

    QPolygon arrowX;
    arrowX << QPoint(width(), height()/2) << QPoint((width())-20, (height()/2)-20); //верхняя часть стрелки
    arrowX << QPoint(width(), height()/2) << QPoint((width())-20,(height()/2)+20); //нижняя часть стрелки
    painter.drawPolygon(arrowX);

    for(int i = 0; i < width(); i+=scale){
        painter.drawLine(i, (height()/2)-5, i, (height()/2)+5); // отрезки слева направо
    }

    for(int i = 0; i < height(); i+=scale){
        painter.drawLine((width()/2)-5, i, (width()/2)+5, i); // отрезки сверху вниз
    }

   for(int i =0; i < width(); i++) {

        y = ((qExp(2*x)/4) + (C/qExp(2*x)) - 2000);
        //y++;
        painter.drawPoint(QPoint(width()/2, height()/2)+QPoint(x, y/1000)); // частное решение диф . уравнения которое я и отрисовываю
        x++;
    }
    painter.end();
}

Переменную "C" беру из главного окна:

void MainWindow::drawChart(){
    chart->x0 = line_x0->text().toDouble();
    chart->yx0 = line_yx0->text().toDouble();
    chart->C = qExp(2*chart->x0)*(2000-(qExp(2*chart->x0)/4)+chart->yx0); // C = e^2x0(2000-(e^2x0/4)+y(x0))

    line_x0->setText(QString::number(chart->y));
    chart->repaint();

}

Собственно, суть в том что все эти позиции x и у не отмасштабированы, и я без понятия как сделать этот масштаб, график просто вылетает за зону видимости. Мне нужно понять как масштабировать график


Ответы (0 шт):