Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как выставить интервалы графика, Проблема с выводом части графика. 
V
    Опции темы
AndreyGers
Дата 30.11.2014, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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++;

но по моему это бредово.
PM MAIL   Вверх
xvr
Дата 1.12.2014, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Перед строкой 20 вставьте
Код

t=t1;
RAZN=(t2-t1)/N;

PS. Код ужасен  smile 

PM MAIL   Вверх
AndreyGers
Дата 1.12.2014, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.11.2014

Репутация: нет
Всего: нет



Спасибо за помощь,уже сам разобрался как выставить начальную точку)
конечная по шагу сама считается.
Вот как)
Код

        p[count].x = x*w + CENTER_X+t1;
        p[count].y = y*w + CENTER_Y+t1;


Это сообщение отредактировал(а) AndreyGers - 1.12.2014, 21:18
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.5443 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.