Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > WinAPI
Перезагрузить страницу рисование равносторонней гиперболы на WinAPI
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
annka_1 annka_1 вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.11.2011
По умолчанию рисование равносторонней гиперболы на WinAPI - 28.11.2011, 16:16

помогите разобраться! есть исходный код рисования синусоиды, нужно заменить синусоиду равносторонней гиперболой.
cpp Код:
#include "stdafx.h"
#include "sinusoida1.h"
#define _USE_MATH_DEFINES
#include <cmath>
#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;                                // current instance
TCHAR szTitle[MAX_LOADSTRING];                  // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];            // the main window class name

// Forward declarations of functions included in this code module:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: Place code here.
    MSG msg;
    HACCEL hAccelTable;

    // Initialize global strings
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_SINUSOIDA1, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    // Perform application initialization:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }

    hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_SINUSOIDA1));

    // Main message loop:
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return (int) msg.wParam;
}



//
//  FUNCTION: MyRegisterClass()
//
//  PURPOSE: Registers the window class.
//
//  COMMENTS:
//
//    This function and its usage are only necessary if you want this code
//    to be compatible with Win32 systems prior to the 'RegisterClassEx'
//    function that was added to Windows 95. It is important to call this function
//    so that the application will get 'well formed' small icons associated
//    with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX);

    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SINUSOIDA1));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = MAKEINTRESOURCE(IDC_SINUSOIDA1);
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

    return RegisterClassEx(&wcex);
}

//
//   FUNCTION: InitInstance(HINSTANCE, int)
//
//   PURPOSE: Saves instance handle and creates main window
//
//   COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // Store instance handle in our global variable

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND  - process the application menu
//  WM_PAINT    - Paint the main window
//  WM_DESTROY  - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
//  int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    static int sx, sy;
    static HPEN hpen1, hpen2;
    int a, b, x_scr, y_scr;
    double x, h;

   
    switch (message)
    {
    case WM_CREATE :
        hpen1 = CreatePen(PS_SOLID, 2, RGB(0, 0, 255));
        hpen2 = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
        break;
    case WM_SIZE:
        sx = LOWORD(lParam);
        sy = HIWORD(lParam);
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        a= sx/2;
        b= sy/2;
        SelectObject(hdc, hpen1);
        MoveToEx(hdc, 0, b, NULL);
        LineTo(hdc, sx, b);
        MoveToEx(hdc, a, 0, NULL);
        LineTo(hdc, a, sy);
        MoveToEx(hdc,0, b, NULL);
        SelectObject(hdc, hpen2);
        h = 3*M_PI/a;
        for (x = -M_PI, x_scr = 0; x < M_PI; x += h)
        {
            x_scr = (x + M_PI)*a/M_PI;
            y_scr = b - b*sin(x);
            LineTo(hdc, x_scr, y_scr);
        }
        EndPaint (hWnd, &ps);
        break;
//  caseWM_DESTROY:
        DeleteObject(hpen1);
        DeleteObject(hpen2);
        PostQuitMessage(0);
        break;
    default: return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// Message handler for about box.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}
просто нужно заменить формулу, но у меня с этим проблемы.
Ответить с цитированием
  (#2 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,266
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 29.11.2011, 11:11

Не просто. У гиперболы два куска, их нужно по отдельности рисовать
cpp Код:
h = a * b / 10;

for (x = 1; x < a; x ++)
{
    x_scr = x + a;
    y_scr = b - h/x;
    if (x > 1)
        LineTo(hdc, x_scr, y_scr);
    else
        MoveToEx(hdc, x_scr, y_scr, NULL);
}

for (x = 1; x < a; x ++)
{
    x_scr = -x + a;
    y_scr = b + h/x;
    if (x > 1)
        LineTo(hdc, x_scr, y_scr);
    else
        MoveToEx(hdc, x_scr, y_scr, NULL);
}

Последний раз редактировалось Alexiski; 29.11.2011 в 11:14
Ответить с цитированием
Пользователь сказал cпасибо:
annka_1 (29.11.2011)
  (#3 (permalink)) Старый
annka_1 annka_1 вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.11.2011
По умолчанию 29.11.2011, 15:44

СПАСИБО ОГРОМНЕЙШЕЕ!!!!!
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование кубической параболы на WinApi annie kio WinAPI 1 20.12.2011 19:30
Рисование Bars777 .NET 1 22.09.2011 02:08
Рисование в GraphABC Наташок Pascal 0 03.01.2011 15:58
Рисование графика y=tg(x) x от (0 до Pi) Latika Lisp 0 16.05.2010 22:19
Рисование кубиков fredwriter Pascal 12 01.04.2010 12:33
рисование сетки!) Mach0 Софт и программы 3 01.04.2008 02:50
Рисование в VB senon_evero Visual Basic 2 08.03.2007 13:47
Рисование графиков в С++ imported__Sergey_ Вопросы начинающих программистов 0 18.10.2006 02:16
Рисование в формах С# MuraVei .NET 3 04.01.2006 12:27
Рисование в текстуру Fester Программирование графики 5 20.03.2005 19:58
Рисование на экране... Кост Visual Basic 6 29.10.2004 23:37
Рисование битмапа на С++ TNT Visual C++ 1 28.05.2004 15:05



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов