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

Лабы / Labs 2004 / LAB5_6 / SCELET1

.CPP
Скачиваний:
22
Добавлен:
16.04.2013
Размер:
4.55 Кб
Скачать

#include <conio.h>
#include <stdio.h>
#include <process.h>
#include <graphics.h>
#include <math.h>
#include <BIOS.h>
#include <DOS.h>


  union inkey         //§¤Ґбм еа ­Ёвбп Ё­д®а¬ жЁп ® ­ ¦ в®© Є« ўЁиҐ
  {                   //ch[0] -¬« ¤иЁ© Ў ©в, ch[1] -бв аиЁ© Ў ©в
	 char ch[2];       //ch[1] -Є®¤ бЄ ­Ёа®ў ­Ёп Є« ўЁиЁ
	 int i;            //ch[0] -ASCII Є®¤
  } c;                //i -®ЎкҐ¤Ё­Ґ­ЁҐ ¤ўге Ў ©в ў б«®ў®


const nPar = 6;
const nMer = 11;


double Px[nPar][nMer], Py[nPar][nMer], Pz[nPar][nMer];


//§ ¤ Ґ¬ §­ зҐ­Ёп 㧫®ўле в®зҐЄ
void basePoint(double fi1, double fi2, double z1, double z2)
{
  double fi, z, dfi=(fi2-fi1)/(nMer-1), dz=(z2-z1)/(nPar-1);
  int i, j;

  for(i=0; i<nMer; i++)
	 for(j=0; j<nPar; j++)
	 {
		fi=fi1+dfi*i; z=z1+dz*j;
		Pz[j][i]=z;
		Py[j][i]=sqrt(z)*sin(M_PI/180.0*fi);
		Px[j][i]=sqrt(z)*cos(M_PI/180.0*fi);
	 }

}



double fi,teta,sf,cf,st,ct;

//ЇҐаҐе®¤ ў ўЁ¤®ўго бЁб⥬㠪®®а¤Ё­ в Ё ®ав®Ја дЁзҐбЄ®Ґ Їа®ҐЄвЁа®ў ­ЁҐ
double Xe(double x,double y)
{
  return -sf*x+cf*y;
}

//ЇҐаҐе®¤ ў ўЁ¤®ўго бЁб⥬㠪®®а¤Ё­ в Ё ®ав®Ја дЁзҐбЄ®Ґ Їа®ҐЄвЁа®ў ­ЁҐ
double Ye(double x,double y,double z)
{
  return -ct*cf*x-ct*sf*y+st*z;
}

double xe1, xe2, ye1, ye2;

//ЇҐаҐў®¤ ўЁ¤®ўле Є®®а¤Ё­ в ў Є®®а¤Ё­ вл ЇЁЄбҐ«Ґ©
int pixelX(double xe)
{
  return (int)(getmaxx()*(xe-xe1)/(xe2-xe1));
}

//ЇҐаҐў®¤ ўЁ¤®ўле Є®®а¤Ё­ в ў Є®®а¤Ё­ вл ЇЁЄбҐ«Ґ©
int pixelY(double ye)
{
  return (int)(getmaxy()*(ye-ye2)/(ye1-ye2));
}


void baseSurface(double fi1, double fi2,  double z1, double z2)
{
  //§ ¤ Ґ¬ §­ зҐ­Ёп 㧫®ўле в®зҐЄ
  basePoint(fi1,fi2,z1,z2);

  //Є®®а¤Ё­ вл Їа®ҐЄвЁа㥬®© в®зЄЁ
  double xe, ye;
  //Є®®а¤Ё­ вл ЇЁЄбҐ«®ў
  int x1,y1,x2,y2;
		setcolor(9);

  int i,j;
  for(i=0; i < nPar; i++)
	 for(j=0; j < nMer-1; j++)
	 {
		xe=Xe(Px[i][j],Py[i][j]);
		ye=Ye(Px[i][j],Py[i][j],Pz[i][j]);
		x1=pixelX(xe);
		y1=pixelY(ye);
		xe=Xe(Px[i][j+1],Py[i][j+1]);
		ye=Ye(Px[i][j+1],Py[i][j+1],Pz[i][j+1]);
		x2=pixelX(xe);
		y2=pixelY(ye);
		line(x1,y1,x2,y2);
	 }


	setcolor(13);

  for(j=0; j<nMer; j++)
	 for(i=0; i<nPar-1; i++)
	 {
		xe=Xe(Px[i][j],Py[i][j]);
		ye=Ye(Px[i][j],Py[i][j],Pz[i][j]);
		x1=pixelX(xe);
		y1=pixelY(ye);
		xe=Xe(Px[i+1][j],Py[i+1][j]);
		ye=Ye(Px[i+1][j],Py[i+1][j],Pz[i+1][j]);
		x2=pixelX(xe);
		y2=pixelY(ye);
		line(x1,y1,x2,y2);
	 }

}


void main()
{
  int driver=DETECT;
  int mode;
  int res;

  initgraph(&driver,&mode,"c:\\borlandc\\bgi");
  if((res=graphresult())!=grOk)
  {
	 printf("\nGraphics error: %s",grapherrormsg(res));
	 exit(1);
  }
	setbkcolor(1);

	//¬ ЄбЁ¬ «м­лҐ ¤«Ё­л ®бҐ© -¬Ёа®ўлҐ Є®®а¤Ё­ вл
  double xmax=1.2, ymax=1.2, zmax=1.2;
  //а §¬Ґал ўЁ¤®ў®Ј® ®Є­  ў Ї«®бЄ®бвЁ Їа®ҐЄвЁа®ў ­Ёп
  double pixelxy=(double)getmaxy()/(double)getmaxx();
  xe1=-2; xe2=2; ye1=-2*pixelxy; ye2=2*pixelxy;

  double fi1, fi2, rad;
  //Є®®а¤Ё­ вл Їа®ҐЄвЁа㥬®© в®зЄЁ
  double xe, ye;
  //Є®®а¤Ё­ вл ЇЁЄбҐ«®ў
  int x1,y1,x2,y2;

	fi=30, teta=60;   //­ з «м­®Ґ Ї®«®¦Ґ­ЁҐ ўЁ¤®ў®© бЁбвҐ¬л Є®®а¤Ё­ в

lbl_1:
	cleardevice();


  char ss[20];
  sprintf(ss,"fi=   %4.0lf",fi);
  outtextxy(550,50,ss);
  sprintf(ss,"teta= %4.0lf",teta);
  outtextxy(550,70,ss);

	//ўлзЁб«Ґ­ЁҐ бЁ­гб®ў Ё Є®бЁ­гб®ў ®аЁҐ­вЁа®ўЄЁ ўЁ¤®ў®© бЁбвҐ¬л Є®®а¤Ё­ в
	sf=sin(M_PI*fi/180);
	cf=cos(M_PI*fi/180);
	st=sin(M_PI*teta/180);
	ct=cos(M_PI*teta/180);

		setcolor(12);

//®бм Ox
		xe=Xe(0,0);
		ye=Ye(0,0,0);
		x1=pixelX(xe);
		y1=pixelY(ye);
		xe=Xe(xmax,0);
		ye=Ye(xmax,0,0);
		x2=pixelX(xe);
		y2=pixelY(ye);
		line(x1,y1,x2,y2);
		outtextxy(x2,y2," X");

//®бм Oy
		xe=Xe(0,0);
		ye=Ye(0,0,0);
		x1=pixelX(xe);
		y1=pixelY(ye);
		xe=Xe(0,ymax);
		ye=Ye(0,ymax,0);
		x2=pixelX(xe);
		y2=pixelY(ye);
		line(x1,y1,x2,y2);
		outtextxy(x2,y2," Y");


//®бм Oz
		xe=Xe(0,0);
		ye=Ye(0,0,0);
		x1=pixelX(xe);
		y1=pixelY(ye);
		xe=Xe(0,0);
		ye=Ye(0,0,zmax);
		x2=pixelX(xe);
		y2=pixelY(ye);
		line(x1,y1,x2,y2);
		outtextxy(x2,y2," Z");
//		setcolor(9);



  //а §¬Ґал ®ЎкҐЄв  ў Ї«®бЄ®бвЁ xy -¬Ёа®ўлҐ Є®®а¤Ё­ вл
  fi1=0; fi2=90;
  baseSurface(fi1,fi2,0.05,0.75);

  fi1=120; fi2=210;
  baseSurface(fi1,fi2,0.05,0.75);



	while(!bioskey(1));
	c.i=bioskey(0);
	if(c.ch[0]==0 && c.ch[1]==72) {teta += 5;  goto lbl_1; }
	if(c.ch[0]==0 && c.ch[1]==80) {teta -= 5;  goto lbl_1; }
	if(c.ch[0]==0 && c.ch[1]==75) {fi += 5;    goto lbl_1; }
	if(c.ch[0]==0 && c.ch[1]==77) {fi -= 5;   goto lbl_1; }

	closegraph();

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