Guest User

Untitled

a guest
Jan 22nd, 2024
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.98 KB | None | 0 0
  1. //Начало .h файла
  2.  
  3. class Spectrum : public QWidget
  4. {
  5.     Q_OBJECT
  6.  
  7. public:
  8.     Spectrum(QWidget *parent = nullptr);
  9.     ~Spectrum();
  10.  
  11.     float scaleX = 0.043;       //Масштаб по оси X
  12.     float scaleY = 1;           //Масштаб по оси Y
  13.  
  14.     float offsetX = 0;          //Отступ от начала координат по оси X
  15.     float offsetY = -180;       //Отступ от начала координат по оси Y
  16.     float minOffsetY = -180;
  17.     float maxOffsetY = 0;
  18.  
  19.     int countInPixel = 1;       //Максимальное количество точек в столбце изображения по оси X
  20.  
  21.     float stepVectorUnitX = 1;  //Шаг значений в vectorUnitY
  22.  
  23.     std::vector<float> vectorUnitX;         //Вектор значений точек по оси X
  24.     std::vector<float> vectorUnitY;         //Вектор значений точек по оси Y
  25.  
  26.     std::vector<int> vectorPixelX;          //Вектор координат точек в пиксельном пространстве по оси X
  27.     std::vector<int> vectorPixelY;          //Вектор координат точек в пиксельном пространстве по оси Y
  28.  
  29.  
  30.     void makeVectorUnitX();                 //Создать vectorUnitX
  31.     void makeVectorUnitY();                 //Создать vectorUnitY
  32.  
  33.     void makeVectorPixelX();                //Создать vectorUnitX
  34.     void makeVectorPixelY();                //Создать vectorUnitY
  35.  
  36.     int sizeFFT = 2048;                     //Размер FFT
  37.  
  38.     QTimer drawTimer;
  39.  
  40.  
  41.     QPoint m_lastPos; // Последняя позиция мыши
  42.  
  43.  
  44. protected:
  45.     void paintEvent(QPaintEvent* event) override;
  46.     void wheelEvent(QWheelEvent *event) override;
  47.     void mousePressEvent(QMouseEvent* event) override;
  48.     void mouseReleaseEvent(QMouseEvent* event) override;
  49.     void mouseMoveEvent(QMouseEvent* event) override;
  50.  
  51. public slots:
  52.     void timeoutTimer();
  53. };
  54.  
  55. //Начало .cpp файла
  56. Spectrum::Spectrum(QWidget *parent) : QWidget(parent)
  57. {
  58.     stepVectorUnitX = 48000.0/sizeFFT;
  59.     makeVectorUnitX();
  60.     makeVectorUnitY();
  61.     makeVectorPixelX();
  62.     makeVectorPixelY();
  63.     makeVectorAproximatedPoint();
  64. //  makeVectorTransform();
  65.  
  66.     QObject::connect(&drawTimer, SIGNAL(timeout()), this, SLOT(timeoutTimer()));
  67.     drawTimer.setInterval(33);
  68.     drawTimer.setSingleShot(false);
  69.     drawTimer.start();
  70.  
  71.     setFocusPolicy(Qt::StrongFocus);
  72.  
  73.     bresenhamLine1.resize(10000);
  74.     bresenhamLine2.resize(10000);
  75. }
  76.  
  77. Spectrum::~Spectrum()
  78. {
  79.  
  80. }
  81.  
  82. void Spectrum::makeVectorUnitX()
  83. {
  84.     if(vectorUnitX.size() != sizeFFT)
  85.     {
  86.         vectorUnitX.resize(sizeFFT, 0);
  87.     }
  88.  
  89.     for(int i = 0; i < sizeFFT; i++)
  90.     {
  91.         vectorUnitX[i] = stepVectorUnitX*i;
  92.     }
  93. }
  94.  
  95. void Spectrum::makeVectorUnitY()
  96. {
  97.     if(vectorUnitY.size() != sizeFFT)
  98.     {
  99.         vectorUnitY.resize(sizeFFT, 0);
  100.     }
  101.  
  102.     std::random_device rd;
  103.     std::mt19937 rng(rd());
  104.     std::uniform_int_distribution<int> rand(-180, 0);
  105.  
  106.     for(int i = 0; i < sizeFFT; i++)
  107.     {
  108.         vectorUnitY[i] = rand(rng);
  109.     }
  110.  
  111.     vectorUnitY[0] = 10;
  112. }
  113.  
  114. void Spectrum::makeVectorPixelX()
  115. {
  116.     if(vectorPixelX.size() != vectorUnitX.size())
  117.     {
  118.         vectorPixelX.resize(vectorUnitX.size(), 0);
  119.     }
  120.  
  121.  
  122.     float pixelOffsetX = offsetX*scaleX;
  123.  
  124.     for(int i = 0; i < vectorPixelX.size(); i++)
  125.     {
  126.         vectorPixelX[i] = round(vectorUnitX[i]*scaleX - pixelOffsetX);
  127.     }
  128. }
  129.  
  130. void Spectrum::makeVectorPixelY()
  131. {
  132.     if(vectorPixelY.size() != vectorUnitY.size())
  133.     {
  134.         vectorPixelY.resize(vectorUnitY.size(), 0);
  135.     }
  136.  
  137.  
  138.     float pixelOffsetY = offsetY*scaleY;
  139.  
  140.     for(int i = 0; i < vectorPixelY.size(); i++)
  141.     {
  142.         vectorPixelY[i] = round(vectorUnitY[i]*scaleY - pixelOffsetY);
  143.     }
  144. }
  145.  
  146. void Spectrum::mousePressEvent(QMouseEvent* event)
  147. {
  148.     m_lastPos = event->pos();
  149. }
  150.  
  151. void Spectrum::mouseReleaseEvent(QMouseEvent* event)
  152. {
  153.  
  154. }
  155.  
  156. void Spectrum::mouseMoveEvent(QMouseEvent* event)
  157. {
  158.     QPointF delta = event->pos() - m_lastPos;
  159.  
  160.     offsetX += -delta.x()/scaleX;
  161.     offsetY += delta.y()/scaleY;
  162.  
  163.     makeVectorPixelX();
  164.  
  165.     m_lastPos = event->pos();
  166. }
  167. void Spectrum::timeoutTimer()
  168. {
  169.     makeVectorUnitY();
  170.     makeVectorPixelY();
  171.  
  172.  
  173.     update();
  174. }
Add Comment
Please, Sign In to add comment