Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 14.10.2021
Сообщений: 2
1

Синусоида в Qt

14.10.2021, 23:04. Показов 4167. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток всем читающим!
суть вопроса в чем: у меня задание создать ПО, рисующего график синуса по заданным условиям(y=k*sin(x)+b; k,b преподаватель хочет и может менять, видя как меняется график(что бы после ввода данных изменился график))
у меня получилось создать прогу, рисующую синус( у=sin(x) ), но как изменить его(или хотя бы ввести переменные k и b вне тела программы(через консоль))???
Файлы:
sinus.pro:
Код
QT       += core gui printsupport

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp \
    qcustomplot.cpp

HEADERS += \
    mainwindow.h \
    qcustomplot.h

FORMS += \
    mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
mainwindow.h
C++ (Qt)
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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QVector>
 
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
 
private:
    Ui::MainWindow *ui;
    double xBegin, xEnd, h, X, k, b, n;
    int N;
 
    QVector<double> x,y;
};
#endif // MAINWINDOW_H
main.cpp
C++ (Qt)
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
#include "mainwindow.h"
 
#include <QApplication>
 
int main(int argc, char *argv[])
{
 
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
 
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtMath>
#include <iostream>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    h = 0.1;
    xBegin=-1000;
    xEnd=1000;
 
    ui->widget->xAxis->setRange(-1, 50);
    ui->widget->yAxis->setRange(-100, 100);
 
    X=xBegin;
    N=(xEnd-xBegin)/h+2;
    QTextStream cout (stdout);
    QTextStream cin (stdin);
 
    for(X=xBegin; X<=xEnd;X+=h)
    {
 
        x.push_back(X);
        y.push_back(sin(X));
    }
    ui->widget->addGraph();
    ui->widget->graph(0)->addData(x,y);
    ui->widget->replot();
    ui->widget->setInteraction(QCP::iRangeZoom,true);
    ui->widget->setInteraction(QCP::iRangeDrag,true);
 
}
 
 
MainWindow::~MainWindow()
{
    delete ui;
}
mainwindow.ui
XML
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
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>363</width>
    <height>257</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QCustomPlot" name="widget" native="true">
    <property name="geometry">
     <rect>
      <x>0</x>
      <y>0</y>
      <width>361</width>
      <height>211</height>
     </rect>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>363</width>
     <height>20</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <customwidgets>
  <customwidget>
   <class>QCustomPlot</class>
   <extends>QWidget</extends>
   <header>qcustomplot.h</header>
   <container>1</container>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections/>
</ui>
также подключены библиотеки qcustomplot.h и qcustomplot.cpp
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2021, 23:04
Ответы с готовыми решениями:

Синусоида
помогите написать в Паскале синусуиду через цикл...

Синусоида
В окне PaintBox с левой стороны до правой стороны образуется синусоида, которая равномерно...

Синусоида.
Написать программу чтобы в консоле рисовала синусоиду, при определенных входящих данных.

синусоида
помогите написать программу рисования синусоиды на микроконтролере

4
2528 / 1247 / 460
Регистрация: 08.11.2016
Сообщений: 3,428
15.10.2021, 07:26 2
очевидно же:
1. вынесите отрисовку графика из конструктора в отдельную член-функцию класса MainWindow и оформите ее как слот
2. добавьте в класс MainWindow пару полей для ввода коэффициентов и кнопку для запуска рисования грфика
3. свяжите сигнал нажатия кнопки со слотом отрисовки.
...
PROFIT!

PS: и зачем Вам консоль в гуёвом приложении? Это от лукавого!
0
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
15.10.2021, 21:26 3
Цитата Сообщение от Zlexey Посмотреть сообщение
у меня получилось создать прогу, рисующую синус( у=sin(x) ), но как изменить его(или хотя бы ввести переменные k и b вне тела программы(через консоль))???
Никогда не поверю, что у человека "получилось создать" синус, но не получается добавить в программу ввод двух переменных.
0
1539 / 720 / 313
Регистрация: 02.05.2020
Сообщений: 1,604
18.10.2021, 12:08 4
Лучший ответ Сообщение было отмечено Zlexey как решение

Решение

C++ (Qt)
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
#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QDoubleSpinBox>
#include "qcustomplot.h"
 
class Window: public QWidget
{
  QCustomPlot* widget;
  QDoubleSpinBox* k;
  QDoubleSpinBox* b;
  const double h = 0.1;
  const double xBegin=-1000;
  const double xEnd=1000;
public:
  Window(): QWidget(nullptr)
  {
    b = new QDoubleSpinBox();
    b->setPrefix("b=");
    connect(b, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &Window::replot);
 
    k = new QDoubleSpinBox();
    k->setPrefix("k=");
    k->setValue(1.0);
    connect(k, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &Window::replot);
 
    widget = new QCustomPlot();
    widget->xAxis->setRange(-1, 50);
    widget->yAxis->setRange(-2, 2);
    widget->setInteraction(QCP::iRangeZoom, true);
    widget->setInteraction(QCP::iRangeDrag, true);
 
    QVBoxLayout* l = new QVBoxLayout();
    l->addWidget(widget);
    l->addWidget(k);
    l->addWidget(b);
    setLayout(l);
    setWindowTitle("y=k*sin(x)+b");
    resize(700, 500);
 
    replot();
  }
 
  void replot()
  {
    QVector<double> x,y;
    for(double step=xBegin; step<=xEnd; step+=h)
    {
      x.push_back(step);
      y.push_back(k->value()*sin(step)+b->value());
    }
    widget->clearGraphs();
    widget->addGraph();
    widget->graph(0)->addData(x,y);
    widget->replot();
  }
};
 
int main(int argc, char** argv)
{
  QApplication app(argc, argv);
  Window window;
  window.show();
  return app.exec();
}
1
342 / 197 / 52
Регистрация: 18.10.2017
Сообщений: 1,938
18.10.2021, 21:14 5
Просто к слову: gnuplot рисует графики, можно по его подобию.
0
18.10.2021, 21:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2021, 21:14
Помогаю со студенческими работами здесь

синусоида
помогите написать программу рисования синусоиды на микроконтролерt

Синусоида!
Привет! Есть вот такой график! нужно вписать в него синусоиду! какой функцией задать, чтобы...

Синусоида OpenGl
Недавно столкнулся с OpenGL и решил нарисовать трехмерную синусоиду в пространстве X Y Z. Знаю что...

синусоида QML+C++
Здравствуйте, может кто знает как сделать так: у меня есть область (toch) в которой я хочу...

Синусоида IR2101
Интересно, а в реальности эта схема будет такую же осциллограмму выдавать?

горизонтальная синусоида
В прямоугольнике горизонтально рисуются n синусоид с заданной частотой и амплитудой, толщиной и...

ЭКГ и синусоида
даны значения экг в блокноте, строим график распределения по второму столбцу файла в блокноте,далее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru