Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
void pictcher(HDC hdc,
int n0, int m0, int ln, int lm,
double xmin, double xmax, double ymin, double ymax,
int kn, int km,
char* strX, char* strY,
char* strCaption,
double* X, double* Y, int N)
{
HBRUSH hbrush, hbrushOld;
HPEN hpen, hpenOld;
POINT pt;
//Є®®а¤Ёвл в®зЄЁ нЄа Ґ ў ЇЁЄбҐ« е
int n, m;
int ne = n0+ln, me = m0+lm;
//ўлзЁб«пҐ¬ Є®нддЁжЁҐвл ¤«п ЇҐаҐў®¤ ¬Ёа®ўле Є®®а¤Ё в
// (x,y) ў ЇЁЄбҐ«л (n,m) n = an*x + bn
// m = am*y + bm
double an, am;
an = ln/(xmax - xmin);
am = lm/(ymin - ymax);
int bn, bm;
bn = n0 - (int)(an*xmin);
bm = m0 - (int)(am*ymax);
MoveToEx(hdc,n0,m0,&pt);
LineTo(hdc,n0+ln,m0);
LineTo(hdc,n0+ln,m0+lm);
LineTo(hdc,n0,m0+lm);
LineTo(hdc,n0,m0);
if(ymin < 0 && ymax >0)
{
n = (int)(an*xmin) + bn;
m = (int)(am*0) + bm;
MoveToEx(hdc,n,m,&pt);
n = (int)(an*xmax) + bn;
m = (int)(am*0) + bm;
LineTo(hdc,n,m);
}
if(xmin < 0 && xmax >0)
{
n = (int)(an*0) + bn;
m = (int)(am*ymin) + bm;
MoveToEx(hdc,n,m,&pt);
n = (int)(an*0) + bn;
m = (int)(am*ymax) + bm;
LineTo(hdc,n,m);
}
//зЁб«® иваЁе®ў Ј®аЁ§®в «м®© Ё ўҐавЁЄ «м®© ®бпе
// kn = 5, km = 4;
//аЁб㥬 иваЁеЁ Ј®аЁ§®в «м®© ®бЁ
for(int k=1; k<kn; k++)
{
n = n0 + (int)(ln*k/((double)kn));
MoveToEx(hdc,n,m0+lm,&pt);
LineTo(hdc,n,m0+lm-5);
}
//аЁб㥬 иваЁеЁ Ј®аЁ§®в «м®© ®бЁ
for( k=1; k<km; k++)
{
m = m0 + (int)(lm*k/((double)km));
MoveToEx(hdc,n0,m,&pt);
LineTo(hdc,n0+5,m);
}
char ss[500];
//ўлў®¤Ё¬ жЁдал Ї®¤ Ј®аЁ§®в «м®© ®бмо
sprintf(ss,"%5.2lf",xmin);
TextOut(hdc,n0-15,m0+lm+5,ss,lstrlen(ss));
sprintf(ss,"%5.2lf",xmax);
TextOut(hdc,n0+ln-15,m0+lm+5,ss,lstrlen(ss));
//ўлў®¤Ё¬ жЁдал б«Ґў ®в ўҐавЁЄ «м®© ®бЁ
sprintf(ss,"%5.2lf",ymin);
TextOut(hdc,n0-45,m0+lm-5,ss,lstrlen(ss));
sprintf(ss,"%5.2lf",ymax);
TextOut(hdc,n0-45,m0,ss,lstrlen(ss));
// ¤ЇЁбм Ї®¤ Ј®аЁ§®в «м®© ®бмо
sprintf(ss,strX);
TextOut(hdc,n0+ln/2,m0+lm+15,ss,lstrlen(ss));
// ¤ЇЁбм б«Ґў ®в ўҐавЁЄ «м®© ®бЁ
// sprintf(ss,"Y");
sprintf(ss,strY);
TextOut(hdc,n0-15,m0+lm/2,ss,lstrlen(ss));
//§ Ј®«®ў®Є
// sprintf(ss,"Signals X = x(n), Y = x(n+mm)");
sprintf(ss,strCaption);
TextOut(hdc,n0+10,m0-20,ss,lstrlen(ss));
//ўлў®¤Ё¬ Ја дЁЄ Y = X(n)
double x = X[0];
double y = Y[0];
n = (int)(an*x) + bn;
m = (int)(am*y) + bm;
MoveToEx(hdc,n,m,&pt);
hpen = CreatePen(PS_SOLID,1,RGB(255,0,0));
hpenOld = SelectPen(hdc,hpen); //ўлЎЁа Ґ¬ ЇҐа® hpen
int xb, yb;
xb = n; yb = m;
for( int i=1; i<N; i++)
{
x = X[i];
y = Y[i];
n = (int)(an*x) + bn;
m = (int)(am*y) + bm;
if(xb>=n0&&xb<=ne&&yb>=m0&&yb<=me&&n<=ne&&n>=n0&&m>=m0&&m<=me)
LineTo(hdc,n,m);
xb = n; yb = m;
MoveToEx(hdc,xb,yb,&pt);
}
DeletePen(hpen); //гЎЁа Ґ¬ ЇҐа® hpen
SelectPen(hdc,hpenOld); //ўлЎЁа Ґ¬ ЇҐа® hpenOld
}