Форум программистов, компьютерный форум CyberForum.ru

Простой класс для построения графиков функции WinAPI - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ задача,дан объем куба,пожалуйста http://www.cyberforum.ru/cpp-beginners/thread1049491.html
Реализовать задачув виде функций выполняемых условно-бесконечном цикле "ввод данных - обработка - вывод - вопрос пользователю о новой итерации обработки" Дан объем куба. Найти площадь его поверхности.
C++ Пожалуйста, откорректируйте задачу! В общем задача : Определить сколько различных символов входит в заданный текст. Задачу решил,все работает,но только на одном слове.Если писать несколько слов,через пробел,то программа считывает различные символы только у первого слова,а нужно у всего текста.Помогите,пожалуйста,дописать программу!Сдавать уже через 4 часа(( Вот код программы: #include<iostream> #include<map> #include<string>... http://www.cyberforum.ru/cpp-beginners/thread1049475.html
C++ Подсчитать количество слов в строке
Дана строка. Словом в ней назовем последовательность подряд идущих латинских букв (больших или маленьких). Подсчитать количество слов в строке.
C++ Дано натуральное число N. Найти сумму первых n натуральных чисел, которые не делятся ни на какие простые числа, кроме 2, 3 и 5
Дано натуральное число N. Найти сумму первых n натуральных чисел, которые не делятся ни на какие простые числа, кроме 2, 3 и 5.
C++ Найти количество натуральных чисел в интервале от 1 до N http://www.cyberforum.ru/cpp-beginners/thread1049458.html
Дано натуральное число N. Найти количество натуральных чисел в интервале от 1 до N, у которых сумма цифр – простое число (единицу не считать простым числом).
C++ Вывести: знак, целую часть, сокращенные числитель и знаменатель дроби Вводятся числитель a и знаменатель b дроби. Вывести: знак, целую часть, сокращенные числитель и знаменатель. подробнее

Показать сообщение отдельно
loou
1 / 1 / 0
Регистрация: 02.08.2013
Сообщений: 29

Простой класс для построения графиков функции WinAPI - C++

20.12.2013, 09:54. Просмотров 496. Ответов 0
Метки (Все метки)

Выкладываю свой простенький класс для построения графика в окне.
Может кому полезен будет. Он конечно кривоват и функционала мало.
Зато предельно прост.

Ну и критика приветствуется

Использование класса:
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
 cPlot Plot; // объявление
 
//.....................
// Там где окно уже создано
double Pos[]={0.0, 0.0, 0.5, 0.5}, // позиция графика в окне в относительных единицах {x1,y1,x2,y2}
       Scale[]={0.0, 0.0, 10.0, 2.0}; // Шкала по X и Y в формате {x1,y1,x2,y2}
 
Plot.Set(hWnd, Pos, Scale); // Можно Pos и Scale опустить, будут использованы значения по умолчанию
 
//.....................
// Гденибудь где нужно задать или изменить данные которые выводяться на график
double X[]={ 0,  1,   2,  3,  4,  5,  6,  7,  8},
       Y[]={ 1,  0, -1,  0,  1,  0, -1,  0,  1};
 
Plot.SetData(X,9,Y,9); // 9 длина массивов, NX=NY, но NX или NY может быть равна 2 тогда X или Y считается линейной
 
// То же самое, что выше но требует меньше памяти и работает быстрее
double X1[]={ 0,  1},
       Y1[]={ 1,  0, -1,  0,  1,  0, -1,  0,  1};
 
Plot.SetData(X,2,Y,9); // X линейная X0=X[0], Xn=X[0]+(X[1]-X[0])*n, !!! при X[1]-X[0] < 0 не работает !!! просто не реализованно 
// или можно вот так
Plot.SetData(Y,9,X,2); 
 
// Отрисовка графика в оконной функции
   case WM_PAINT: {
      hdc = BeginPaint(hWnd, &ps);
      // TODO: Add any drawing code here...
      Plot.Draw(); // Отрисовка графика; 
      EndPaint(hWnd, &ps);
      } break;
 
// Изменение шкалы, например по колесику мыши
   case WM_MOUSEWHEEL: {
      int N; double dX, Scale[4];
      Plot.GetScale(Scale);
      
      wheelDelta += GET_WHEEL_DELTA_WPARAM(wParam);
      N=wheelDelta/WHEEL_DELTA; wheelDelta-=N*WHEEL_DELTA; 
 
      dX=0.1*(Scale[2]-Scale[0])*N;
      Scale[0]-=dX; Scale[2]-=dX;
 
      Plot.SetScaleX(Scale); // или SetScaleY
      } break;
 
// Сохранение относительных размеров графика при изменении размера окна
   case WM_SIZE: {
      Plot.SetPosX(); // Устанавливает положение по горизонтали в окне по текущему Pos в относительных единицах
      Plot.SetPosY(); // то-же по вертикали, Если нужно изменить положение Plot.SetPosX(Pos),
      } break;           // если нужно установить в пикселях Plot.SetPPosX(PPos)
 
// Подписи к осям по умолчанию X и Y
SetXLabel(_T("X Scale")); // void SetXLabel(TCHAR *tcLabel) и так же для Y
Вложения
Тип файла: rar cPlot.rar (5.8 Кб, 22 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru