Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / Labs 2004 / Exempl2 / DIAGRAM

.CPP
Скачиваний:
22
Добавлен:
16.04.2013
Размер:
3.09 Кб
Скачать
#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

}




Соседние файлы в папке Exempl2