singlepost

нужен хелп по графике C++ << На главную или назад  

ребят, срочно помощь нужна. задача – построить картинку, что ниже по ссыли, максимально оптимировав код. нужен только код для построения самих линий. все вертикальные и горизонтальные не нужны. заранее благодарен.

//i037.radikal.ru/0907/52/af30e4096820.jpg

я пока дошел только до этого, не могу понять как добить циклы.

#include <windows.h>
//#include "resource.h"

HINSTANCE hInst;
char szAppName[] ="ApiWin";
char szTitle[] ="Window Application";

int cxClient;
int cyClient;

int i=1;
int n=1;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
WNDCLASSEX wc;
HWND hwnd;
hInst=hInstance;
memset(&wc,0,sizeof(wc));
wc.style =CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra= 0;
wc.cbWndExtra= 0;
wc.hInstance = hInst;
//wc.hIcon=(HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_ICON1),IMAGE_ICON,32,32,0);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+13);
wc.lpszMenuName= NULL;
wc.lpszClassName = szAppName;
wc.cbSize=sizeof(WNDCLASSEX);
//wc.hIconSm=LoadImage(hInst,MAKEINTRESOURCE(IDI_APPICON_SM),IMAGE_ICON,16,16,0);

if(!RegisterClassEx(&wc))
return FALSE;

hwnd = CreateWindow(szAppName, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
NULL, NULL, hInst, NULL);

if (!hwnd)
return (FALSE);

ShowWindow(hwnd, nCmdShow);

UpdateWindow(hwnd);

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
}

LRESULT CALLBACK WndProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{

PAINTSTRUCT ps;
HDC hdc;

switch (message)
{
case WM_SIZE:
{
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
return 0;

}
case WM_PAINT:
{

hdc=BeginPaint(hwnd,&ps);

HGDIOBJ hPen=CreatePen(PS_DASH, 2, RGB(0,0,0));
HGDIOBJ hOldPen=SelectObject(hdc,hPen);

HGDIOBJ hBrush=CreateSolidBrush(RGB(134,134,134));
HGDIOBJ hOldBrush=SelectObject(hdc,hBrush);
/*шар*/
Ellipse(hdc,cxClient/2-10,0,cxClient/2+10,20);
/*линии*/

MoveToEx(hdc, cxClient/2-10, 0, NULL);
LineTo(hdc, cxClient/2-10, 40);

MoveToEx(hdc, cxClient/2+10, 0, NULL);
LineTo(hdc, cxClient/2+10, 40);

while (n<=5){

while(i<=5){

MoveToEx(hdc, cxClient/(2*i), i*cyClient/5-20, NULL);
LineTo(hdc, cxClient/(2*(i+1)), i*cyClient/5+40);

MoveToEx(hdc, cxClient/(2*i), i*cyClient/5-20, NULL);
LineTo(hdc, cxClient/i-cxClient/(2*(i+1)), i*cyClient/5+40);
i++;
}

n++;

}

EndPaint(hwnd,&ps);
break;
}
/*case WM_LBUTTONDOWN:
MessageBox(NULL,"Hello, 32-bit world!","Window",MB_OK);
*/break;

case WM_DESTROY:
PostQuitMessage(0);
break;

default:
return (DefWindowProc(hwnd, message, wParam, lParam));
}
return (0);
}

18 ответов в теме “нужен хелп по графике C++”

  1. 5
    Леонид Максимов ответил:

    читаем условие внимательно:
    > нужен только код для построения самих линий. все вертикальные и горизонтальные не нужны.

  2. 4
    Леша Ульянин ответил:

    тобишь крышу катать просто 2мя линиями? или она как объект там есть?

  3. 3
    Леонид Максимов ответил:

    может мне за вас все написать, чтобы сразу? сказано же – крыша занимает половину отведенного ей места (две средние четвертинки).

  4. 2
    Леша Ульянин ответил:

    а как саму крышу создать?

  5. 1
    Леонид Максимов ответил:

    основа рисунка – занимающая половину места "крыша", втиснутая необходимое количество раз.

    for(i=0;i<5;i++){
    n=1<<i;
    l=0;
    for(j=0;j<n;j++){
    r=l+cxClient/n;
    roof(l,r,i*step_y);
    l=r;
    }
    }

    короче, разберетесь.

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