Ребят, нужно меандры нарисовать. Технику рисования то вроде знаю, вот только алгоритм все никак продумать не могу(((( не подскажете?
#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);
}
11 июля 2009 в 15:02
вот меандры:
//www.arjuna-design.ru/i/meander.gif правда надо отразить по горизонтали
//fio.ifmo.ru/archive/group20/c3wu8/pics/meandr...
//inf.1september.ru/2006/11/26-2.gif и этот отразить надо