Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
2 / 2 / 1
Регистрация: 19.12.2017
Сообщений: 68
1

Построить график функции

10.02.2018, 13:12. Просмотров 4414. Ответов 21
Метки нет (Все метки)

f(x) =
x2 -3
3x2 - 2(под корнем)

x = 0.5
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2018, 13:12
Ответы с готовыми решениями:

Перевести с Pascal вычисление функции на заданном промежутке и построить график этой функции
uses crt,graphABC; function y(x:real):real; begin if x<0 then y:=x*x else if x<=2.5 then...

Написать блок-схему и программу вычисления функции на заданном промежутке и построить график этой функции
написать блок-схему и программу вычисления функции на за- данном промежутке с шагом 0.2 и...

Построить график функции
Построить график функции y={x}^{3}/(2*{x+1}^{2}) . В интервале -10 < x < 10. Шаг приращения ...

Построить график функции
Здравствуйте, помогите с написанием программы. Есть функция y=a*{x}^{2}+b. Программа заключается в...

21
1462 / 1170 / 551
Регистрация: 08.01.2012
Сообщений: 4,510
10.02.2018, 13:30 2
чего в 3-мерном? переменных две, и где рисовать, в консоли?
0
-6 / 25 / 3
Регистрация: 09.11.2015
Сообщений: 143
10.02.2018, 16:16 3
а можно нормально функцию написать?
0
2690 / 1637 / 345
Регистрация: 09.09.2017
Сообщений: 6,696
11.02.2018, 09:54 4
Так?
https://www.cyberforum.ru/cgi-bin/latex.cgi?f(x) = \frac{x^2-3}{3x^2-\sqrt{2}}
Я тоже не знаю что ТС имел в виду, это всего лишь мое представление его писанины
1
2 / 2 / 1
Регистрация: 19.12.2017
Сообщений: 68
11.02.2018, 12:16  [ТС] 5
COKPOWEHEU, да, извините, я новенький, поэтому не очень круто написал, все правильно, только под корнем весь знаменатель
0
Модератор
Эксперт С++
9913 / 8436 / 5129
Регистрация: 18.12.2011
Сообщений: 22,581
11.02.2018, 12:26 6
Цитата Сообщение от dizzying Посмотреть сообщение
под корнем весь знаменатель
тогда при 3x2 меньших 2 функция неопределена.
0
2690 / 1637 / 345
Регистрация: 09.09.2017
Сообщений: 6,696
11.02.2018, 12:51 7
dizzying, для этого в самом низу, под полем ответа есть редактор формул.
Дальше. Вы хотите вывести график функции. В С/С++ нет стандартных библиотек для работы с графикой. Какую библиотеку используете вы? OpenGL, SDL, QT, GTK, WinAPI, curses, может доисторический BGI (graphics.h)
0
1462 / 1170 / 551
Регистрация: 08.01.2012
Сообщений: 4,510
11.02.2018, 12:56 8
Builder, WinForms чего проигнорировали?
0
2690 / 1637 / 345
Регистрация: 09.09.2017
Сообщений: 6,696
11.02.2018, 13:46 9
Если перечислять вообще все графические библиотеки, это статью писать надо
0
outoftime
11.02.2018, 14:33
  #10

Не по теме:

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Если перечислять вообще все графические библиотеки, это статью писать надо
Вы не правы, статью на каждую, а потом оглавление со ссылками на эти статьи в виде отдельной статьи.ф

0
3926 / 2147 / 367
Регистрация: 05.10.2013
Сообщений: 6,168
Записей в блоге: 169
11.02.2018, 22:08 11
Приложение должно быть оконное или консольное?

Если оконное, то нужно выбрать библиотеку для создания окна.
0
2 / 2 / 1
Регистрация: 19.12.2017
Сообщений: 68
12.02.2018, 00:31  [ТС] 12
8Observer8, да, оконное, именно в плюсах
0
3926 / 2147 / 367
Регистрация: 05.10.2013
Сообщений: 6,168
Записей в блоге: 169
12.02.2018, 08:26 13
Какая у вас операционная система? Я предполагаю, что Windows, но сейчас очень популярны Moc, мало ли.

Допустим, у вас Windows с установленной средой Visual Studio версии от 2008 до 2017, у меня VS2015.

Неважно какая версия. Откройте Visual Studio:
  • создайте проект - выберите в меню: "File" -> "New" -> "Project..."
  • в колонке слева выделите "Visual C++" -> в колонке посередине выделите "Win32 Project"
  • внизу можете ввести название проекта и его расположение на жёстком диске -> нажмите кнопку "OK"
  • на следующем окне нажмите кнопку "Finish"

Если вы воспринимаете лучше визуально, то смотрите этот видео туториал и повторяйте, как создать проект: C++ Win32 Lesson 1: Creating a Simple Application (2010)
youtube


График можно рисовать с помощью отрезков. Чем короче отрезки, тем более сглаженный будет график.

Посмотрите это короткое видео, как нарисовать отрезок с помощью функции DrawLine: C++ Win32 Lesson 4: Drawing Lines and Ellipses with GDI
youtube


Вот так можно нарисовать параболу. Вам нужно заменить формулу параболы в коде на формулу из вашего задания.

Найдите в коде секцию рисования:
C++
1
2
3
4
5
6
7
8
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
            // TODO: Add any drawing code that uses hdc here...
            EndPaint(hWnd, &ps);
        }
        break;
Скопируйте и замените эту секцию следующим кодом, который рисует параболу:

C++
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
        case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
            // TODO: Add any drawing code that uses hdc here...
 
            HPEN hPenOld;
 
            // Узнаём ширину и высоту окна
            RECT rect;
            GetClientRect(hWnd, &rect);
            LONG width = rect.right - rect.left;
            LONG height = rect.bottom - rect.top;
            
            // offsetX и offsetY - Смещения по X и Y, чтобы
            // график рисовался в центре окна
            LONG offsetX = width / 2;
            LONG offsetY = height / 2;
 
            // Коэффициент масштабирования
            LONG scale = 10;
 
            // Draw a red line
            HPEN hLinePen;
            COLORREF qLineColor;
            qLineColor = RGB(62, 98, 50);
            hLinePen = CreatePen(PS_SOLID, 2, qLineColor);
            hPenOld = (HPEN)SelectObject(hdc, hLinePen);
 
            // x0 = -3, y0= x0^2 = -3^2 = 9
            // x1 = -2, y1 = x1^2 = -2^2 = 4
            LONG a = -3 * scale + offsetX;
            LONG b = -3 * -3 * scale + offsetY;
            MoveToEx(hdc, -3 * scale + offsetX, -3 * -3 * scale + offsetY, NULL);
            LineTo(hdc, -2 * scale + offsetX, -2 * -2 * scale + offsetY);
            // x1 = -2, y1 = x1^2 = -2^2 = 4
            // x2 = -1, y2 = x2^2 = -1^2 = 1
            MoveToEx(hdc, -2 * scale + offsetX, -2 * -2 * scale + offsetY, NULL);
            LineTo(hdc, -1 * scale + offsetX, -1 * -1 * scale + offsetY);
            // x2 = -1, y2 = x2^2 = -1^2 = 1
            // x3 = 0, y3 = x3^2 = 0^2 = 0
            MoveToEx(hdc, -1 * scale + offsetX, -1 * -1 * scale + offsetY, NULL);
            LineTo(hdc, 0 * scale + offsetX, 0 * 0 * scale + offsetY);
            // x3 = 0, y3 = x3^2 = 0^2 = 0
            // x4 = 1, y4 = x4^2 = 1^2 = 1
            MoveToEx(hdc, 0 * scale + offsetX, 0 * 0 * scale + offsetY, NULL);
            LineTo(hdc, 1 * scale + offsetX, 1 * 1 * scale + offsetY);
            // x4 = 1, y4 = x4^2 = 1^2 = 1
            // x5 = 2, y5 = x5^2 = 2^2 = 4
            MoveToEx(hdc, 1 * scale + offsetX, 1 * 1 * scale + offsetY, NULL);
            LineTo(hdc, 2 * scale + offsetX, 2 * 2 * scale + offsetY);
            // x5 = 2, y5 = x5^2 = 2^2 = 4
            // x6 = 3, y6 = x6^2 = 3^2 = 9
            MoveToEx(hdc, 2 * scale + offsetX, 2 * 2 * scale + offsetY, NULL);
            LineTo(hdc, 3 * scale + offsetX, 3 * 3 * scale + offsetY);
 
            SelectObject(hdc, hPenOld);
            DeleteObject(hLinePen);
 
            EndPaint(hWnd, &ps);
        }
        break;
0
2690 / 1637 / 345
Регистрация: 09.09.2017
Сообщений: 6,696
12.02.2018, 12:43 14
Цитата Сообщение от dizzying Посмотреть сообщение
8Observer8, да, оконное, именно в плюсах
Так графическая библиотека-то какая?
Вот, например, график синуса на SDL2 + OpenGL1 (старая версия как-то нагляднее, а скорость здесь не требуется)
C
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
#include <GL/gl.h>
#include <GL/glu.h>
#include <math.h>
#include <SDL2/SDL.h>
 
SDL_Window *window; //объект окна, нужен для взаимодействия с оконной системой ОС
SDL_GLContext context; //объект OpenGL. Теоретически, все вызовы должны осуществляться его методами, но напрямую - проще
 
void draw(){
  float x,y;
  glBegin(GL_LINE_STRIP);
  glColor3f(1,1,1);
  for(x=-1; x<1; x+=0.01){
    y = sin(2*x);
    glVertex2f(x,y);
  }
  glEnd();
}
 
char update(){
  SDL_Event event;
  while(SDL_PollEvent(&event)){
    if(event.type == SDL_QUIT){return false;}
  }
  return true;
}
 
int main(int argc, char **argv){
  window = SDL_CreateWindow("Open GL + SDL window",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,
                            800, 600, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
  if(window == NULL){goto FINISH;} //не удалось создать окно - ошибка (на модели не обрабатывается)
  context=SDL_GL_CreateContext(window);
  if(context == NULL){goto FINISH;} //не удалось привязать OpenGL к окну - ошибка (не обрабатывается)
  //настройки OpenGL
  glClearColor(0,0,0,0);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluOrtho2D(-1,1, -1,1);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  
  while(update()){
    glClear(GL_COLOR_BUFFER_BIT);
    draw();
    glFlush();
    SDL_GL_SwapWindow(window);
  }
FINISH:
  if(context){SDL_GL_DeleteContext(context); context=0;}
  if(window){SDL_DestroyWindow(window); window=0;}
  SDL_Quit();
}
Добавлено через 1 час 33 минуты
P.S. Маленький опросик: считаете ли вы goto в моем коде уместным или лучше было извратиться без него?
В коде, из которого я надергал этот пример, вся работа с SDL была вынесена в объект и goto там не было если что.
0
2 / 2 / 1
Регистрация: 19.12.2017
Сообщений: 68
12.02.2018, 13:07  [ТС] 15
8Observer8, в принципе я понял почти все, только вот не понял где мне менять формулу из примера на мою.
0
3926 / 2147 / 367
Регистрация: 05.10.2013
Сообщений: 6,168
Записей в блоге: 169
12.02.2018, 13:43 16
Цитата Сообщение от dizzying Посмотреть сообщение
8Observer8, в принципе я понял почти все, только вот не понял где мне менять формулу из примера на мою.
Это я свой ответ не перепроверил перед отправкой. Я сначала хотел написать формулой. Она там скрыта. Задаются шесть значений X:[-3, -2, -1, 0, 1, 2, 3] и для них считаются значения Y, как X*X:[9, 4, 1, 0, 1, 4, 9]. Отрезками соединяются точки: [-3, 9] <-> [-2, 4], [-2, 4] <-> [-1, 1], [-1, 1] <-> [0,0]

Перед тем, как строить какой-то график, сначала можно ввести формулу и посмотреть, как он выглядит здесь: https://www.wolframalpha.com/i... *x%5E2+-+2)

Добавлено через 4 минуты
Цитата Сообщение от dizzying;
Элемент Chart предназначен для вывода в экранную форму графика (диаграммы). Очень удобно строить этот график по табличным данным, представленным в виде объекта класса DataTable.
В данном примере решается следующая задача . Даны сведения об объемах продаж за пять месяцев. Требуется наглядно визуализировать эти данные на графике в виде гистограммы.
Для решения этой задачи запустите Visual Studio и в окне NewProject выберите в среде CLR узла Visual C++ приложение шаблона WindowsFormsApplicationVisual C++. Данное решение назовите ГрафикChart. Из панели ToolBox перенесите в проектируемую экранную форму следующие элементы: диаграмму Chart и сетку данных DataGridView. Для этого нам понадобится пустой обработчик события — «щелчок на диаграмме Chart». Для получения этого пустого обработчика, используя контекстное меню элемента Chart в конструкторе проектируемой формы, перейдите к свойствам этого элемента. Здесь в окне Properties щелкните на значке молнии (События) и в списке возможных событий выберите событие Click. Дважды щелкнув на отображении этого события, попадаете на вкладку программного кода с готовым пустым обработчиком этого события.
В программном коде при обработке события загрузки формы объявите объектТаблица класса DataTable. Этот объект представляет одну таблицу данных в оперативной памяти. Чтобы визуализировать эту таблицу на экране, используют элемент — сетка данных DataGridView. Объект класса DataTable используют в качестве исходных данных и для сетки данных DataGridView, и для диаграммы Chart. В таблице DataTable определите ее схему, заказывая две колонки «Месяц»и «Объем продаж». А далее заполните таблицу по ее строкам (рядам), используя метод Add. Заполненную пятью строками таблицу укажите в качестве источника данных для элементов Chart и DataGridView. Далее оформите внешний вид диаграмм.
Здесь я не могу помочь. Я с CLI не работал. Вам тогда нужно было в этом разделе тему создавать: https://www.cyberforum.ru/cpp-cli/
0
2 / 2 / 1
Регистрация: 19.12.2017
Сообщений: 68
12.02.2018, 14:14  [ТС] 17
8Observer8, то есть то что скидывали мне вы в моем случае не поможет? делать совсем по другому?
0
3926 / 2147 / 367
Регистрация: 05.10.2013
Сообщений: 6,168
Записей в блоге: 169
12.02.2018, 14:24 18
Цитата Сообщение от dizzying Посмотреть сообщение
то есть то что скидывали мне вы в моем случае не поможет? делать совсем по другому?
Да, в вашем случае не поможет. Делайте совсем по-другому.
0
2 / 2 / 1
Регистрация: 19.12.2017
Сообщений: 68
12.02.2018, 14:26  [ТС] 19
8Observer8, понял, спасибо что отозвались помочь!
0
1149 / 699 / 477
Регистрация: 25.04.2016
Сообщений: 1,975
28.04.2018, 09:33 20
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вот, например, график синуса на SDL2 + OpenGL1
Все отлично, только где SDL_Init() ?

Добавлено через 8 минут
да и колбаса SDL_CreateWindow получается великовата, я бы сделал что-то вроде:

C++
1
2
3
4
5
6
7
8
9
    // настройки окна:
    char title[21] = "Open GL + SDL window";// title
    int w = 800, h = 600;                   // width, height
    int wpos = SDL_WINDOWPOS_UNDEFINED;     // window position
    int flags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE;
 
    // инициируем SDL, при необходимости отлова ошибок, завернуть в if
    // SDL_Init(SDL_INIT_VIDEO);
    window = SDL_CreateWindow(title, wpos, wpos, w, h, flags);  // создаем окно
COKPOWEHEU, на счет SDL_Init, сори, тупанул, это ж плюсы.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2018, 09:33

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Построить график функции
#include &lt;clocale&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; #include &lt;cmath&gt; #include &lt;iostream&gt;...

Построить график функции
Постройте график функции y = sin2(x)+2 на интервале . Обозначьте оси координат, нарисуйте...

Построить график функции
программа которая строит график функции y=|x|sin x Заранее большое спасибо.

Построить график функции
написать программу, которая выводит на экран график функции y=2*sin(x)*exp(sqrt(5)


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.