-
Notifications
You must be signed in to change notification settings - Fork 0
/
mainwindow.cpp
91 lines (81 loc) · 2.44 KB
/
mainwindow.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QMessageBox>
#include<cmath>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
MainWindow::makePlot();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::makePlot()
{
double sizeOfVector = 30*500;
QVector<double> x(sizeOfVector), y(sizeOfVector);
int j = 0;
double step = -10;
while (step<20) {
x[j] = step;
y[j] = step * step / sin(step/4 * M_PI) +
exp(log(abs (step) * abs(sin(M_PI * step / 2 + 1 )))) ;
j++;
step+=0.02;
}
ui->customePlot->addGraph();
ui->customePlot->setInteraction(QCP::iRangeDrag,true);
ui->customePlot->setInteraction(QCP::iRangeZoom,true);
ui->customePlot->axisRect()->setRangeDrag(Qt::Horizontal);
ui->customePlot->axisRect()->setRangeZoom(Qt::Horizontal);
ui->customePlot->xAxis->setAutoTickStep(true);
ui->customePlot->graph(0)->setData(countX(), countY());
ui->customePlot->rescaleAxes();
ui->customePlot->replot();
ui->customePlot->xAxis->setLabel("x");
ui->customePlot->yAxis->setLabel("y");
ui->customePlot->yAxis->setRange(100, 100);
ui->customePlot->replot();
}
void MainWindow::on_btnSave_clicked()
{
QString fileName = QFileDialog::getSaveFileName(this,
tr("Choose a filename to save under"),
QString(),
tr("PNG(*.png);;JPG(*.jpg);;PDF(*.pdf);;BMP(*.bmp);;All Files(*)")
);
if (!fileName.isEmpty())
{
ui->customePlot->savePng(fileName);
}
QMessageBox::information(this,"Файл сохранён",fileName);
}
QVector<double> MainWindow::countX()
{
int sizeOfVector = 30*500;
QVector <double> x(sizeOfVector);
double step = -10;
int indexOfVector = 0;
while (step<20) {
x[indexOfVector]=step;
indexOfVector++;
step += 0.02;
}
return x;
}
QVector<double> MainWindow::countY()
{
QVector <double> x = countX();
int sizeOfVector = x.size();
QVector<double> y(sizeOfVector);
for(int i=0; i<sizeOfVector; i++)
{
y[i] = x[i] * x[i] / sin(x[i]/4 * M_PI) +
exp(log(abs (x[i]) * abs(sin(M_PI * x[i] / 2 + 1 )))) ;
}
return y;
}