Can anyone help make a rotating schedule? The application is written in C ++ Qt.
#include "mainwindow.h" #include "ui_mainwindow.h" #include <cfloat> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } // Π€ΡΠ½ΠΊΡΠΈΡ 1 double function_1(double x) { return x; } // Π€ΡΠ½ΠΊΡΠΈΡ 2 double function_2(double x) { return x * x; } // Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ CheckBox-Π° ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ class SelectFunction { public: SelectFunction(QCheckBox *cb, double (*funct)(double)) : checkBox(cb), function(funct) {} const QCheckBox* getCheck() { return checkBox; } double (* getFunction())(double) { return function; } private: QCheckBox *checkBox; // ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° CheckBox double (*function)(double); // ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ }; void MainWindow::on_buttonDrawCharts_clicked() { layout=new QVBoxLayout(); std::vector<SelectFunction> checksFunct; checksFunct.push_back(SelectFunction(ui->checkFunc_1, function_1)); checksFunct.push_back(SelectFunction(ui->checkFunc_2, function_2)); bool ok_a, ok_b, ok_h; double a = ui->lineEdit_a->text().toDouble(&ok_a); double b = ui->lineEdit_b->text().toDouble(&ok_b); double h = ui->lineEdit_h->text().toDouble(&ok_h); if (!ok_a || !ok_b || !ok_h) { QMessageBox msgBox; msgBox.setText("ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ Π·Π°Π΄Π°Π½Ρ Π²Ρ
ΠΎΠ΄Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ."); msgBox.exec(); return; } double minY = DBL_MAX, maxY = DBL_MIN; // ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΡΠ΅ΠΊ int n = (b - a) / h + 2; if (n != 0) { // ΠΡΠΈΡΠ°Π΅ΠΌ Π²ΡΠ΅ Π³ΡΠ°ΡΠΈΠΊΠΈ ui->widgetCharts->clearGraphs(); // ΠΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΎΡΠΈ Ox ΠΈ Oy ui->widgetCharts->xAxis->setLabel("X"); ui->widgetCharts->yAxis->setLabel("Y"); size_t number_charts = 0; // Π¦ΠΈΠΊΠ», ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ for (size_t i = 0; i < checksFunct.size(); ++i) { if (checksFunct[i].getCheck()->isChecked()) { // Π΅ΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ CheckBox QVector<double> points_x(n), points_y(n); double x = a; // Π·Π°Π΄Π°Π΅ΠΌ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ x double (*funct)(double) = checksFunct[i].getFunction(); // ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ // Π¦ΠΈΠΊΠ» ΠΏΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Ρ, Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΠ°Π³ΠΎΠΌ for (int j = 0; j < n; ++j, x += h) { points_x[j] = x; points_y[j] = funct(x); // ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΡΠΈ Oy if (points_y[j] < minY) minY = points_y[j]; if (points_y[j] > maxY) maxY = points_y[j]; } // ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ Π³ΡΠ°ΡΠΈΠΊ Π² widgetCharts ui->widgetCharts->addGraph(); // ΠΠ°Π΄Π°Π΅ΠΌ Π³ΡΠ°ΡΠΈΠΊ Π΄Π»Ρ ΠΎΡΡΠΈΡΠΎΠ²numbersΠΊΠΈ ui->widgetCharts->graph(number_charts)->setData(points_x, points_y); // ΠΠ°Π΄Π°Π΅ΠΌ ΡΠΈΠΏ ΡΠΎΡΠ΅ΠΊ ui->widgetCharts->graph(number_charts)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 3)); // Π£Π²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΡΡ
Π³ΡΠ°ΡΠΈΠΊΠΎΠ² ++number_charts; } } // Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΠΎΠ±Π»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ΅ ui->widgetCharts->xAxis->setRange(a, b); // Π΄Π»Ρ ΠΎΡΠΈ Ox ui->widgetCharts->yAxis->setRange(minY, maxY); // Π΄Π»Ρ ΠΎΡΠΈ Oy connect(sl,SIGNAL(valueChanged(int)),this,SLOT(mov())); // Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠ²Π°Π½ΠΈΡ Π³ΡΠ°ΡΠΈΠΊΠΎΠ² ui->widgetCharts->setInteraction(QCP::iRangeZoom, true); // Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ Π³ΡΠ°ΡΠΈΠΊΠΎΠ² ui->widgetCharts->setInteraction(QCP::iRangeDrag, true); // ΠΠ΅ΡΠ΅ΡΠΈΡΡΠ΅ΠΌ Π³ΡΠ°ΡΠΈΠΊ Π½Π° Π½Π°ΡΠ΅ΠΌ widgetCharts ui->widgetCharts->replot(); } } void MainWindow::mov() { QPainterPath temp1(QPointF(x_res*300,y_res*300)); for(double i=0; i>=-y_res*sqrt(6500); i-=x_res*3) { double x = cos(2*3.1415926535897932384626433832795*2*(sl->value()-49)/100); double y = sin(2*3.1415926535897932384626433832795*2*(sl->value()-49)/100); temp1.lineTo(x_res*(300+i*x+i*i*y*0.05),y_res*(300-(i*i*x*0.05-i*y))); } temp1.moveTo(x_res*300,y_res*300); for(double i=0; i<y_res*sqrt(6500); i+=x_res*3) { double x = cos(2*3.1415926535897932384626433832795*2*(sl->value()-49)/100); double y = sin(2*3.1415926535897932384626433832795*2*(sl->value()-49)/100); temp1.lineTo(x_res*(300+i*x+i*i*y*0.05),y_res*(300-(i*i*x*0.05-i*y))); } QPainterPath temp2(QPointF(x_res*300,y_res*300)); for(double i=0; i<y_res*300; i+=x_res*3) { double x = cos(2*3.1415926535897932384626433832795*2*(sl->value()-49)/100); double y = sin(2*3.1415926535897932384626433832795*2*(sl->value()-49)/100); temp2.lineTo(x_res*(300+i*x+i*y),y_res*(300-(i*xi*y))); } temp2.moveTo(x_res*300,y_res*300); for(double i=0; i>=-y_res*300; i-=x_res*3) { double x = cos(2*3.1415926535897932384626433832795*2*(sl->value()-49)/100); double y = sin(2*3.1415926535897932384626433832795*2*(sl->value()-49)/100); temp2.lineTo(x_res*(300+i*x+i*y),y_res*(300-(i*xi*y))); } scene->removeItem(path1); scene->removeItem(path2); path1 = new QGraphicsPathItem(temp1); path1->setPos(0,0); path1->setPen(QPen(Qt::blue)); path2 = new QGraphicsPathItem(temp2); path2->setPos(0,0); path2->setPen(QPen(Qt::red)); scene->addItem(path1); scene->addItem(path2); scene->setSceneRect(x_res*0,y_res*0,x_res*600,y_res*600); view->setScene(scene); }