Новичок
Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.11.2014
Репутация: нет Всего: нет
|
Очередной ужасный код построения графика. | Код | #include "stdafx.h" #include <windows.h> #include <conio.h> #include <math.h> #include <stdio.h> #define N 20 #define CENTER_X 100 #define CENTER_Y 100 // глобальные переменные POINT p[N]; // объявление функций LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM RegMyWindowClass(HINSTANCE, LPCTSTR);
int w = 2; // коэффициент масштабирования. double x = 0, y = 0,t=0,RAZN=0.155,a=2,t1=5.2,t2=8.3; int count = 0,i; void setPoints(int n) { for(count; count < N; count++) { x = ((a*(t*t))/(1+(t*t)))*10; y = ((a*(t*t*t))/(1+(t*t)))*10; t+=RAZN; p[count].x = x*w + CENTER_X; p[count].y = y*w + CENTER_Y; } } // функция вхождений программы WinMain int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // имя класса LPCTSTR lpzClass = TEXT("My Window Class!"); LPCTSTR lpzClassName = lpzClass; // регистрация класса if (!RegMyWindowClass(hInstance, lpzClass)) return 1; // вычисление координат центра экрана RECT screen_rect; GetWindowRect(GetDesktopWindow(), &screen_rect); // разрешение экрана int x = screen_rect.right / 2 - 150; int y = screen_rect.bottom / 2 - 75; // создание диалогового окна HWND hWnd = CreateWindow(lpzClass, TEXT("Schedule Window"), WS_OVERLAPPEDWINDOW | WS_VISIBLE, x, y, 300, 300, NULL, NULL, hInstance, NULL); // если окно не создано, описатель равен 0 if (!hWnd) return 2; // цикл сообщений приложения MSG msg = { 0 }; // структура сообщения int iGetOk = 0; // переменная состояния while ((iGetOk = GetMessage(&msg, NULL, 0, 0)) != 0) // цикл сообщений { if (iGetOk == -1) return 3; // если GetMessage вернул ошибку - выход TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; // возвращаем код завершения программы } // функция регистрации класса окон ATOM RegMyWindowClass(HINSTANCE hInst, LPCTSTR lpzClassName) { WNDCLASS wcWindowClass = { 0 }; // адрес ф-ции обработки сообщений wcWindowClass.lpfnWndProc = (WNDPROC)WndProc; // стиль окна wcWindowClass.style = CS_HREDRAW | CS_VREDRAW; // дискриптор экземпляра приложения wcWindowClass.hInstance = hInst; // название класса wcWindowClass.lpszClassName = lpzClassName; // загрузка курсора wcWindowClass.hCursor = LoadCursor(NULL, IDC_ARROW); // загрузка цвета окон wcWindowClass.hbrBackground = (HBRUSH)COLOR_BACKGROUND; return RegisterClass(&wcWindowClass); // регистрация класса } // функция обработки сообщений LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_LBUTTONUP: InvalidateRect(hWnd,NULL,TRUE); break; case WM_DESTROY: PostQuitMessage(0); // реакция на сообщение break; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc; hdc = BeginPaint(hWnd, &ps); setPoints(N); HPEN Pen = CreatePen(PS_SOLID, 2, RGB(0, 0, 0)); HPEN PenOld=(HPEN)SelectObject(hdc, Pen); MoveToEx(hdc, 0, CENTER_Y, NULL); // текущая позиция точки. LineTo(hdc, 2 * CENTER_X, CENTER_Y); // построение прямой линии (оси). MoveToEx(hdc, CENTER_X, 0, NULL); LineTo(hdc, CENTER_X, 2 * CENTER_Y); Polyline(hdc, p, 20); // построение линий по точкам p. SelectObject(hdc, PenOld); DeleteObject(Pen); EndPaint(hWnd, &ps); break; } } return DefWindowProc(hWnd, message, wParam, lParam); }
|
Необходимо чтобы график выводило по заданным интервалам интервал от t1 до t2. Подскажите пожалуйста как это сделать. пробовал влепить | Код | #define GRAPHMOVE 100 count = t1; for (double i = t1; i <= t2; i += RAZN) { MoveToEx(hdc, p[count].x + GRAPHMOVE , p[count].y + GRAPHMOVE, NULL); LineTo(hdc, p[count].x + GRAPHMOVE , p[count].y + GRAPHMOVE); count++;
|
но по моему это бредово.
|