singlepost

задача по графике << На главную или назад  

Ребят, нужно меандры нарисовать. Технику рисования то вроде знаю, вот только алгоритм все никак продумать не могу(((( не подскажете?

#include <windows.h>

//#include "resource.h"

#include <math.h>

HINSTANCE hInst;

char szAppName[] = "ApiWin" ;

char szTitle[] = "Window Application" ;
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+1);
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);
}

int x=600;

int y=250;

float CD=0;

float CD1=-90;

int dist=100;

float angle = 90;

//float angle2 = 60;
/*void turn(float angle)
{
CD+=angle;
return;
}
*/

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

static short cxClient, cyClient;
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, 5, RGB(0,255,100));
HGDIOBJ hOldPen=SelectObject(hdc,hPen);
POINT A;
POINT FAR* lppt=&A;
MoveToEx(hdc,x,y,lppt);

for ( int j=0; j<1; j++)
{

for ( int i=0; i<3; i++)
{

const double RadPerDeg=0.017453393;
x=x+dist*cos(RadPerDeg*CD);
y=y+dist*sin(RadPerDeg*CD);
LineTo(hdc,x,y);
CD=CD+angle;
POINT A;
POINT FAR* lppt=&A;
MoveToEx(hdc,x,y,lppt);
}
MoveToEx(hdc,x,y,lppt);

const double RadPerDeg=0.017453393;

//CD=CD-angle;

x=x+dist*cos(RadPerDeg*CD1);
y=y+dist*sin(RadPerDeg*CD1);
LineTo(hdc,x,y);
POINT A;
POINT FAR* lppt=&A;
MoveToEx(hdc,x,y,lppt);
}

EndPaint(hwnd,&ps);

break ;
}

case WM_DESTROY:
PostQuitMessage(0);

break ;

default :

return (DefWindowProc(hwnd, message, wParam, lParam));
}

return (0);
}

Один ответ в теме “задача по графике”

  1. 1
    Альбинка Шакирзянова ответил:

    вот меандры:
    //www.arjuna-design.ru/i/meander.gif правда надо отразить по горизонтали

    //fio.ifmo.ru/archive/group20/c3wu8/pics/meandr...

    //inf.1september.ru/2006/11/26-2.gif и этот отразить надо

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