Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/35: Рейтинг темы: голосов - 35, средняя оценка - 4.77
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638

Нарисовать графики функций

08.07.2023, 04:44. Показов 8750. Ответов 105
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Нужно вывести(нарисовать) графики функций, но пока что не могу разобраться с параметрами, вот функции:
https://www.cyberforum.ru/cgi-bin/latex.cgi?2\ast a\ast \cos (k\ast t)\ast \exp (-n\ast t) \\0.5\ast a \ast \sin  (k \ast t)\ast \exp (-n \ast t)
Для начала, хочется понять, что означают координаты:

a - угол?
k - не знаю, что это. Возможно, это коэффициент, обозначающий принадлежность числа к определённому числовому диапазону...
n - тоже самое.
t - точность или время?

Пояснений к этим параметрам нет, какими должны быть диапазоны заданных значений... Если предположить, что 'a' - это угол, то тут ясно [0, 360], а вот с другими аргументами проблема.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.07.2023, 04:44
Ответы с готовыми решениями:

Нарисовать графики линейных функций
Добрый день. Пришла в голову мысль реализовать программу, которая рисует графики линейных функции - f(x)=kx+b, где k, b - вводятся с...

Нарисовать графики
Какой класс лучше всего использовать, чтобы нарисовать график? Например, есть программа, в которой в конце нужно будет нарисовать график...

Как нарисовать графики ?
#include <iostream> #include <conio.h> using namespace std; void main() { const int X=4,Y=12; const...

105
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
14.07.2023, 10:41
Студворк — интернет-сервис помощи студентам
Попробуйте
t=0...300
k=0.05
n=0.02
a выбрать так чтобы на экране помещалось. Если у вас масштабирования нет, то 100-200
0
3136 / 1735 / 273
Регистрация: 19.02.2010
Сообщений: 4,534
14.07.2023, 11:22
Цитата Сообщение от Liss29 Посмотреть сообщение
Переделал.
Плохие коэффициенты выбраны для получения графика на картинке - при сведении к целочисленным координатам точек никакого разнообразия у значения функции не выходит.

Цитата Сообщение от Liss29 Посмотреть сообщение
Сделал
Лучше вытащи вычисление каждой своей рисуемой функции в отдельные функции, которым по ссылке передаётся экземпляр типа POINT (да и объект типа GRAPHVALUE тоже можно туда передавать, чтобы не было привязки этих функций к глобальной переменной).
Чтобы не было дублирования кода, как сейчас получилось.
И внутри тех функций будет кастинг результатов к целочисленному типу координат в POINT - чтобы потом MoveTo/LineTo брали целочисленные координаты из POINT'а.
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
14.07.2023, 11:42
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Лучше вытащи вычисление каждой своей рисуемой функции в отдельные функции, которым по ссылке передаётся экземпляр типа POINT
В контексте winapi говорить "лучше"... Лучше вообще этой штукой не пользоваться без крайней необходимости.
Я когда-то уже приводил пример рисования графика через SDL2 + OpenGL, переделать под задачу ТС несложно:
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
63
64
65
66
67
68
69
70
71
#include <GL/gl.h>
#include <GL/glu.h>
#include <math.h>
#include <SDL2/SDL.h>
 
SDL_Window *window; //объект окна, нужен для взаимодействия с оконной системой ОС
SDL_GLContext context; //объект OpenGL. Теоретически, все вызовы должны осуществляться его методами, но напрямую - проще
 
float a = 1;
float k = M_PI;
float n = 1;
float t = 5;
 
void draw(){
  float x,y;
  glBegin(GL_LINES);
    glColor3f(1,1,1);
    glVertex2f(-1, 0);
    glVertex2f(6,0);
    glVertex2f(0, -5);
    glVertex2f(0, 5);
  glEnd();
  glBegin(GL_LINE_STRIP);
    glColor3f(1,0,0);
    for(float x = 0; x<t; x+=0.03){
      y = 2*a*cos(t*x)*exp(-n*x);
      glVertex2f(x, y);
    }
  glEnd();
  glBegin(GL_LINE_STRIP);
    glColor3f(0,1,0);
    for(float x = 0; x<t; x+=0.03){
      y = 0.5*a*sin(t*x)*exp(-n*x);
      glVertex2f(x, y);
    }
  glEnd();
}
 
char update(){
  SDL_Event event;
  while(SDL_PollEvent(&event)){
    if(event.type == SDL_QUIT){return 0;}
  }
  return 1;
}
 
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(-0.1,5, -2,2);
  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();
}
Миниатюры
Нарисовать графики функций  
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
15.07.2023, 07:29  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Попробуйте
Нет, не то, нормальный график не получается.
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
15.07.2023, 07:46  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Попробуйте
t=0...300
k=0.05
n=0.02
Выделил функцию 2 * a * cos() без exp(), вот что получилось.

0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
15.07.2023, 07:51  [ТС]
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Лучше вытащи вычисление каждой своей рисуемой функции в отдельные функции
А в чём выгода вызов функции обходится не так уж и дешево. Тогда уж можно для каждой функции выделить отдельный поток.

Добавлено через 3 минуты

Не по теме:

Вопрос не по теме, но, если в окне диалога хочу нажимать кнопку Ок по нажатии клавиши enter, то почему то ничего не происходит, диалоговые окна никак не реагирует на WM_KEYDOWN? Есть идея субклассить кнопку ОК, а более нет здравых идей?

0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
15.07.2023, 08:50  [ТС]
cos() без exp().

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
for (double i = 1.0; i < gval.t; i += 1.0)
    {
        double y = 2.0 * gval.a * cos((gval.k) * i * M_PI * 2 / 180.0);
        LineTo(hdc, (int)i-270, (int)y);
    }

0
3136 / 1735 / 273
Регистрация: 19.02.2010
Сообщений: 4,534
15.07.2023, 08:55
Цитата Сообщение от Liss29 Посмотреть сообщение
А в чём выгода вызов функции обходится не так уж и дешево.
Выгода в более читаемом коде, без дублирований (а ещё при дублированиях есть риск того, что при какой-то переделке можно исправить одно место и забыть аналогично исправить во втором/третьем).

И как-бы весь ВинАПИ - это вызовы функций. Но что-то никто не жаловался даже во времена Вин3, т.е. 30 лет назад.
0
15.07.2023, 09:17  [ТС]

Не по теме:

Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
И как-бы весь ВинАПИ - это вызовы функций. Но что-то никто не жаловался даже во времена Вин3, т.е. 30 лет назад.
И что теперь не думать о производительности совсем, так тоже не годиться. К тому же сейчас не до изысков я с основной темой разобраться не могу т.е. с отрисовкой графика, какого рожна мне сейчас о другом думать.

К тому же, 30-лет назад не было многих парадигм, которые есть сейчас.

Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Выгода в более читаемом коде, без дублирований (а ещё при дублированиях есть риск того, что при какой-то переделке можно исправить одно место и забыть аналогично исправить во втором/третьем).
А может быть первоначально разобраться в основной теме вопроса, а потом уже переходить, к обсуждению того, как лучше оформить код.;)

0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
15.07.2023, 10:51
Цитата Сообщение от Liss29 Посмотреть сообщение
А в чём выгода вызов функции обходится не так уж и дешево
Об этом вообще не нужно думать. Оптимизирующий компилятор все ваши вызовы функций встроит (inline), и в ассемблерном коде не будет никаких вызовов функций.
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
16.07.2023, 09:53  [ТС]
Можно ли такой результат считать верным?

0
Заблокирован
16.07.2023, 11:38
спирали/эллипсы поинтересней синусоид
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
16.07.2023, 13:02
Цитата Сообщение от Liss29 Посмотреть сообщение
Можно ли такой результат считать верным?
Наверное. Вроде синусоиды, вроде модулированы экспонентами.
Цитата Сообщение от CoderPC Посмотреть сообщение
спирали/эллипсы поинтересней синусоид
У синусоид хотя бы физический смысл прослеживается - затухающие колебания. Liss29, исходя из физического смысла, N должно быть положительным, чтобы колебания затухали.
0
Заблокирован
16.07.2023, 15:27
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
физический смысл прослеживается
смысл из начальной школы, в №31 странно они затухают
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
16.07.2023, 15:29
Потому что ТС зачем-то сделал N отрицательным. Можно подумать, в исходной формуле минус для красоты стоит
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
17.07.2023, 00:31  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Потому что ТС зачем-то сделал N отрицательным.
Без этого минуса ничего стоящего не получается вот и ввёл его.
0
Заблокирован
17.07.2023, 06:13
Liss29, кто на горизонтальной оси, и в каком диапазоне?
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
17.07.2023, 07:57
Цитата Сообщение от Liss29 Посмотреть сообщение
Без этого минуса ничего стоящего не получается вот и ввёл его.
Я ж вам приводил код что для обычного gnuplot'а, что для Си. Везде получаются нормальные затухающие колебания. Или, возможно, вы t не от нуля берете, а от -T? Тогда да, в отрицательную сторону экспонента будет быстро расти.
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
17.07.2023, 10:16  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Или, возможно, вы t не от нуля берете
Я вам тоже код приводил и в нём указан цикл, который начинается от нуля.
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
17.07.2023, 10:30
Но на графиках у вас ось OY посередине.
Можете привести полный код, чтобы его сразу скомпилировать и проверить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.07.2023, 10:30

Графики функций
Помогите пожалуйста исправить программу. Она неправильно рисует функцию FunS() и в компоненте Image график не такой получается. Написать...

Графики функций в с++
Подскажите пожалуйста, правильно ли создавать графики в с++ с помощью библиотеки OPenGL? Может существуют другие, более удобные библиотеки...

графики функций
привет. мне дана функция вида Y=kX+b где k=0;k=1; k=1.5 помогите пожалуйста построить график функции

Графики функций
Привет. Написал программу, которая строит график функции, заданной в Edit. Но возникла некоторая проблема: графики с большой степенью...

Использование графики. Нарисовать точку.
Задал этот вопрос в Delphi, разобрался. А как в С++ Builder пишется? Господа, только не смейтесь. Не найду как нарисовать точку. ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru