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

Лабы / 4 / SFERA

.CPP
Скачиваний:
20
Добавлен:
16.04.2013
Размер:
16.67 Кб
Скачать
//Ї®бв஥­ЁҐ б®бв ў­®© Ї®ўҐае­®бвЁ ЃҐ§мҐ (ЄгЎЁзҐбЄЁ© бЇ« ©­)
//ќв® п ў§п« Їа®Јг Љ®а­ҐҐў , Ј¤Ґ ®­ аЁб®ў « 1/8 Ї®ўҐае­®бвЁ бдҐал (б¬. Їа®ЈЁ Љ®а­ҐҐў )
// Ё ᤥ« « ўбо бдҐаг
#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 -®ЎкҐ¤Ё­Ґ­ЁҐ ¤ўге Ў ©в ў б«®ў®

double Px[4][4], Py[4][4], Pz[4][4]; //иҐбв­ ¤ж вм 㧫.в®зҐЄ Ї®ўҐае­®бвЁ ЃҐ§мҐ
double Px1[4][4], Py1[4][4], Pz1[4][4]; //иҐбв­ ¤ж вм 㧫.в®зҐЄ Ї®ўҐае­®бвЁ ЃҐ§мҐ
double Px2[4][4], Py2[4][4], Pz2[4][4]; //иҐбв­ ¤ж вм 㧫.в®зҐЄ Ї®ўҐае­®бвЁ ЃҐ§мҐ
double Px3[4][4], Py3[4][4], Pz3[4][4]; //иҐбв­ ¤ж вм 㧫.в®зҐЄ Ї®ўҐае­®бвЁ ЃҐ§мҐ

double Px4[4][4], Py4[4][4], Pz4[4][4]; //иҐбв­ ¤ж вм 㧫.в®зҐЄ Ї®ўҐае­®бвЁ ЃҐ§мҐ
double Px5[4][4], Py5[4][4], Pz5[4][4]; //иҐбв­ ¤ж вм 㧫.в®зҐЄ Ї®ўҐае­®бвЁ ЃҐ§мҐ
double Px6[4][4], Py6[4][4], Pz6[4][4]; //иҐбв­ ¤ж вм 㧫.в®зҐЄ Ї®ўҐае­®бвЁ ЃҐ§мҐ
double Px7[4][4], Py7[4][4], Pz7[4][4]; //иҐбв­ ¤ж вм 㧫.в®зҐЄ Ї®ўҐае­®бвЁ ЃҐ§мҐ
//дг­ЄжЁп ўлЎа ­­®© Ї®ўҐае­®бвЁ
double functionZ(double x,double y)
{
  return sqrt(1-x*x)*sqrt(1-y*y);
}

//§ ¤ Ґ¬ §­ зҐ­Ёп 㧫®ўле в®зҐЄ
void basePoint(double fi1, double fi2, double rad1, double rad2)
{
  double fi, r, dfi=(fi2-fi1)/3, dr=(rad2-rad1)/3;
  int i, j;

  for(i=0; i<4; i++)
    for(j=0; j<4; j++)
    {
      fi=fi1+dfi*i; r=rad1+dr*j;
      Py[j][i]=r*sin(M_PI/180.0*fi);
      Px[j][i]=r*cos(M_PI/180.0*fi);
    }


  for(j=0; j<4; j++)
    for(i=0; i<4; i++)
    { if (j!=3)
      Pz[j][i]=functionZ(Px[j][i],Py[j][i]);
      else  Pz[j][i]=0; }
}

void basePointMy()
{     int i,j;
  for(i=0; i<4; i++)
    for(j=0; j<4; j++)
    {
      Py1[j][i]=Py[j][i];
      Px1[j][i]=Px[j][i];
      Pz1[j][i]=(-Pz[j][i]);
    }
  for(i=0; i<4; i++)
    for(j=0; j<4; j++)
    {
      Py2[j][i]=(-Py[j][i]);
      Px2[j][i]=Px[j][i];
      Pz2[j][i]=Pz[j][i];
    }
  for(i=0; i<4; i++)
    for(j=0; j<4; j++)
    {
      Py3[j][i]=(-Py[j][i]);
      Px3[j][i]=Px[j][i];
      Pz3[j][i]=(-Pz[j][i]);
    }

  for(i=0; i<4; i++)
    for(j=0; j<4; j++)
    {
      Py4[j][i]=(-Py[j][i]);
      Px4[j][i]=(-Px[j][i]);
      Pz4[j][i]=Pz[j][i];
    }
  for(i=0; i<4; i++)
    for(j=0; j<4; j++)
    {
      Py5[j][i]=Py[j][i];
      Px5[j][i]=(-Px[j][i]);
      Pz5[j][i]=Pz[j][i];
    }
  for(i=0; i<4; i++)
    for(j=0; j<4; j++)
    {
      Py6[j][i]=Py[j][i];
      Px6[j][i]=(-Px[j][i]);
      Pz6[j][i]=(-Pz[j][i]);
    }
  for(i=0; i<4; i++)
    for(j=0; j<4; j++)
    {
      Py7[j][i]=(-Py[j][i]);
      Px7[j][i]=(-Px[j][i]);
      Pz7[j][i]=(-Pz[j][i]);
    }
}


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));
}


double Bezie(int i, double t)  //зҐвлॠдг­ЄжЁЁ ЃҐ§мҐ (ЃҐа­и⥩­ )
{
   double b;
   switch(i)
   {
     case 0  : b=(1-t)*(1-t)*(1-t); break;
     case 1  : b=3*t*(1-t)*(1-t);   break;
     case 2  : b=3*t*t*(1-t);       break;
     case 3  : b=t*t*t;             break;
     default : printf("\nError in function Bezie"); exit(1);
   }
   return b;
}

double splineX(double u,double v,int g)
{
  double S1=0, S2;
  int i,j;
       if (g==0)
  for(i=0; i<4; i++)
  {
    S2=0;
    for(j=0; j<4; j++)
      S2 += Px[i][j]*Bezie(j,v);
    S1 += S2*Bezie(i,u);
  }
      else
       switch (g) {
       case 1:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Px1[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 2:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Px2[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 3:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Px3[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 4:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Px4[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 5:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Px5[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 6:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Px6[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 7:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Px7[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
	   }
  return S1;
}


double splineY(double u,double v,int g)
{
  double S1=0, S2;
  int i,j;
       if (g==0)
  for(i=0; i<4; i++)
  {
    S2=0;
    for(j=0; j<4; j++)
      S2 += Py[i][j]*Bezie(j,v);
    S1 += S2*Bezie(i,u);
  }
      else
       switch (g) {
       case 1:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Py1[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 2:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Py2[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 3:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Py3[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 4:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Py4[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 5:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Py5[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 6:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Py6[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 7:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Py7[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
	   }
  return S1;
}

double splineZ(double u,double v,int g)
{
  double S1=0, S2;
  int i,j;
       if (g==0)
  for(i=0; i<4; i++)
  {
    S2=0;
    for(j=0; j<4; j++)
      S2 += Pz[i][j]*Bezie(j,v);
    S1 += S2*Bezie(i,u);
  }
      else
       switch (g) {
       case 1:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Pz1[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 2:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Pz2[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 3:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Pz3[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 4:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Pz4[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 5:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Pz5[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 6:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Pz6[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
       case 7:
	      for(i=0; i<4; i++)
	      {
	       S2=0;
	       for(j=0; j<4; j++)
	       S2 += Pz7[i][j]*Bezie(j,v);
	       S1 += S2*Bezie(i,u);
	       }       break;
	   }
  return S1;
}


   int kl=1;


void baseSurface(double fi1, double fi2, double rad1, double rad2, double scale)
{
  //§ ¤ Ґ¬ §­ зҐ­Ёп 㧫®ўле в®зҐЄ
  basePoint(fi1,fi2,rad1,rad2);
  basePointMy();
  //Є®®а¤Ё­ вл Їа®ҐЄвЁа㥬®© в®зЄЁ
  double xe, ye;
  //Є®®а¤Ё­ вл ЇЁЄбҐ«®ў
  int x1,y1,x2,y2;

  int i,j;

if(kl==1)
{
  for(i=0; i<4; i++)
    for(j=0; j<3; j++)
    {
      //­Ґ ¬®Ґ
      xe=scale*Xe(Px[i][j],Py[i][j]);
      ye=scale*Ye(Px[i][j],Py[i][j],Pz[i][j]);
      x1=pixelX(xe);
      y1=pixelY(ye);
      xe=scale*Xe(Px[i][j+1],Py[i][j+1]);
      ye=scale*Ye(Px[i][j+1],Py[i][j+1],Pz[i][j+1]);
      x2=pixelX(xe);
      y2=pixelY(ye);
      line(x1,y1,x2,y2);
      //¬®Ґ
      xe=scale*Xe(Px1[i][j],Py1[i][j]);
      ye=scale*Ye(Px1[i][j],Py1[i][j],Pz1[i][j]);
      x1=pixelX(xe);
      y1=pixelY(ye);
      xe=scale*Xe(Px1[i][j+1],Py1[i][j+1]);
      ye=scale*Ye(Px1[i][j+1],Py1[i][j+1],Pz1[i][j+1]);
      x2=pixelX(xe);
      y2=pixelY(ye);
      line(x1,y1,x2,y2);

      xe=scale*Xe(Px2[i][j],Py2[i][j]);
      ye=scale*Ye(Px2[i][j],Py2[i][j],Pz2[i][j]);
      x1=pixelX(xe);
      y1=pixelY(ye);
      xe=scale*Xe(Px2[i][j+1],Py2[i][j+1]);
      ye=scale*Ye(Px2[i][j+1],Py2[i][j+1],Pz2[i][j+1]);
      x2=pixelX(xe);
      y2=pixelY(ye);
      line(x1,y1,x2,y2);

      xe=scale*Xe(Px3[i][j],Py3[i][j]);
      ye=scale*Ye(Px3[i][j],Py3[i][j],Pz3[i][j]);
      x1=pixelX(xe);
      y1=pixelY(ye);
      xe=scale*Xe(Px3[i][j+1],Py3[i][j+1]);
      ye=scale*Ye(Px3[i][j+1],Py3[i][j+1],Pz3[i][j+1]);
      x2=pixelX(xe);
      y2=pixelY(ye);
      line(x1,y1,x2,y2);

      xe=scale*Xe(Px4[i][j],Py4[i][j]);
      ye=scale*Ye(Px4[i][j],Py4[i][j],Pz4[i][j]);
      x1=pixelX(xe);
      y1=pixelY(ye);
      xe=scale*Xe(Px4[i][j+1],Py4[i][j+1]);
      ye=scale*Ye(Px4[i][j+1],Py4[i][j+1],Pz4[i][j+1]);
      x2=pixelX(xe);
      y2=pixelY(ye);
      line(x1,y1,x2,y2);

      xe=scale*Xe(Px5[i][j],Py5[i][j]);
      ye=scale*Ye(Px5[i][j],Py5[i][j],Pz5[i][j]);
      x1=pixelX(xe);
      y1=pixelY(ye);
      xe=scale*Xe(Px5[i][j+1],Py5[i][j+1]);
      ye=scale*Ye(Px5[i][j+1],Py5[i][j+1],Pz5[i][j+1]);
      x2=pixelX(xe);
      y2=pixelY(ye);
      line(x1,y1,x2,y2);

      xe=scale*Xe(Px6[i][j],Py6[i][j]);
      ye=scale*Ye(Px6[i][j],Py6[i][j],Pz6[i][j]);
      x1=pixelX(xe);
      y1=pixelY(ye);
      xe=scale*Xe(Px6[i][j+1],Py6[i][j+1]);
      ye=scale*Ye(Px6[i][j+1],Py6[i][j+1],Pz6[i][j+1]);
      x2=pixelX(xe);
      y2=pixelY(ye);
      line(x1,y1,x2,y2);

      xe=scale*Xe(Px7[i][j],Py7[i][j]);
      ye=scale*Ye(Px7[i][j],Py7[i][j],Pz7[i][j]);
      x1=pixelX(xe);
      y1=pixelY(ye);
      xe=scale*Xe(Px7[i][j+1],Py7[i][j+1]);
      ye=scale*Ye(Px7[i][j+1],Py7[i][j+1],Pz7[i][j+1]);
      x2=pixelX(xe);
      y2=pixelY(ye);
      line(x1,y1,x2,y2);
    }

  for(j=0; j<4; j++)
    for(i=0; i<3; i++)
    {
      xe=scale*Xe(Px[i][j],Py[i][j]);
      ye=scale*Ye(Px[i][j],Py[i][j],Pz[i][j]);
      x1=pixelX(xe);
      y1=pixelY(ye);
      xe=scale*Xe(Px[i+1][j],Py[i+1][j]);
      ye=scale*Ye(Px[i+1][j],Py[i+1][j],Pz[i+1][j]);
      x2=pixelX(xe);
      y2=pixelY(ye);
      line(x1,y1,x2,y2);
      //¬®Ґ
      xe=scale*Xe(Px1[i][j],Py1[i][j]);
      ye=scale*Ye(Px1[i][j],Py1[i][j],Pz1[i][j]);
      x1=pixelX(xe);
      y1=pixelY(ye);
      xe=scale*Xe(Px1[i+1][j],Py1[i+1][j]);
      ye=scale*Ye(Px1[i+1][j],Py1[i+1][j],Pz1[i+1][j]);
      x2=pixelX(xe);
      y2=pixelY(ye);
      line(x1,y1,x2,y2);

      xe=scale*Xe(Px2[i][j],Py2[i][j]);
      ye=scale*Ye(Px2[i][j],Py2[i][j],Pz2[i][j]);
      x1=pixelX(xe);
      y1=pixelY(ye);
      xe=scale*Xe(Px2[i+1][j],Py2[i+1][j]);
      ye=scale*Ye(Px2[i+1][j],Py2[i+1][j],Pz2[i+1][j]);
      x2=pixelX(xe);
      y2=pixelY(ye);
      line(x1,y1,x2,y2);

      xe=scale*Xe(Px3[i][j],Py3[i][j]);
      ye=scale*Ye(Px3[i][j],Py3[i][j],Pz3[i][j]);
      x1=pixelX(xe);
      y1=pixelY(ye);
      xe=scale*Xe(Px3[i+1][j],Py3[i+1][j]);
      ye=scale*Ye(Px3[i+1][j],Py3[i+1][j],Pz3[i+1][j]);
      x2=pixelX(xe);
      y2=pixelY(ye);
      line(x1,y1,x2,y2);

      xe=scale*Xe(Px4[i][j],Py4[i][j]);
      ye=scale*Ye(Px4[i][j],Py4[i][j],Pz4[i][j]);
      x1=pixelX(xe);
      y1=pixelY(ye);
      xe=scale*Xe(Px4[i+1][j],Py4[i+1][j]);
      ye=scale*Ye(Px4[i+1][j],Py4[i+1][j],Pz4[i+1][j]);
      x2=pixelX(xe);
      y2=pixelY(ye);
      line(x1,y1,x2,y2);

      xe=scale*Xe(Px5[i][j],Py5[i][j]);
      ye=scale*Ye(Px5[i][j],Py5[i][j],Pz5[i][j]);
      x1=pixelX(xe);
      y1=pixelY(ye);
      xe=scale*Xe(Px5[i+1][j],Py5[i+1][j]);
      ye=scale*Ye(Px5[i+1][j],Py5[i+1][j],Pz5[i+1][j]);
      x2=pixelX(xe);
      y2=pixelY(ye);
      line(x1,y1,x2,y2);

      xe=scale*Xe(Px6[i][j],Py6[i][j]);
      ye=scale*Ye(Px6[i][j],Py6[i][j],Pz6[i][j]);
      x1=pixelX(xe);
      y1=pixelY(ye);
      xe=scale*Xe(Px6[i+1][j],Py6[i+1][j]);
      ye=scale*Ye(Px6[i+1][j],Py6[i+1][j],Pz6[i+1][j]);
      x2=pixelX(xe);
      y2=pixelY(ye);
      line(x1,y1,x2,y2);

      xe=scale*Xe(Px7[i][j],Py7[i][j]);
      ye=scale*Ye(Px7[i][j],Py7[i][j],Pz7[i][j]);
      x1=pixelX(xe);
      y1=pixelY(ye);
      xe=scale*Xe(Px7[i+1][j],Py7[i+1][j]);
      ye=scale*Ye(Px7[i+1][j],Py7[i+1][j],Pz7[i+1][j]);
      x2=pixelX(xe);
      y2=pixelY(ye);
      line(x1,y1,x2,y2);
    }
}
getchar();

  int N=1000;
  double u,v,du=1.0/N,dv=1.0/N;
 for(int c=0;c<8;c++)
  for(j=0; j<4; j++)
  {
    v=1.0/3.0*j;
    for(i=0; i<N; i++)
    {
      u=du*i;
      xe=scale*Xe(splineX(u,v,c),splineY(u,v,c));
      ye=scale*Ye(splineX(u,v,c),splineY(u,v,c),splineZ(u,v,c));
      x1=pixelX(xe);
      y1=pixelY(ye);
      putpixel(x1,y1,14);
    }
  }

getchar();

 for(c=0;c<8;c++)
  for(j=0; j<4; j++)
  {
    u=1.0/3.0*j;
    for(i=0; i<N; i++)
    {
      v=dv*i;
      xe=scale*Xe(splineX(u,v,c),splineY(u,v,c));
      ye=scale*Ye(splineX(u,v,c),splineY(u,v,c),splineZ(u,v,c));
      x1=pixelX(xe);
      y1=pixelY(ye);
      putpixel(x1,y1,12);
    }
  }
}


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

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



  //а §¬Ґал ўЁ¤®ў®Ј® ®Є­  ў Ї«®бЄ®бвЁ Їа®ҐЄвЁа®ў ­Ёп
  double pixelxy=(double)getmaxy()/(double)getmaxx();
  xe1=-2; xe2=2;  ye1=-2*pixelxy; ye2=2*pixelxy;
//  setgraphmode(1);

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

   fi=30, teta=60;   //­ з «м­®Ґ Ї®«®¦Ґ­ЁҐ ўЁ¤®ў®© бЁбвҐ¬л Є®®а¤Ё­ в
   double scale=1;   //¬Ґ­пҐ¬ а §¬Ґал ®ЎкҐЄв  ¬Ґ­пп Є®нддЁжЁҐ­в scale
lbl_1:

   cleardevice();

   //ўлзЁб«Ґ­ЁҐ бЁ­гб®ў Ё Є®бЁ­гб®ў ®аЁҐ­вЁа®ўЄЁ ўЁ¤®ў®© бЁбвҐ¬л Є®®а¤Ё­ в
   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(3);

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

   while(!bioskey(1)); //Їа®ўҐапҐв Ґбвм «Ё бЁ¬ў®« ў ЎгдҐаҐ ўў®¤ 
		       //дг­ЄжЁп ­Ґ ®бв®­ ў«Ёў Ґв Їа®Ја ¬¬г
   c.i=bioskey(0);     //ў®§ўа й Ґв Є®¤ ­ ¦ в®© Є« ўЁиЁ (ЇаҐалў ­ЁҐ 0x14)
		       //Ё § ЇЁблў Ґв ў ®ЎкҐ¤Ё­Ґ­Ґ б
		       //Ґб«Ё ЎгдҐа Їгбв, в® Їа®Ја ¬¬  ®бв ­ ў«Ёў Ґвбп
   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; }
   if(c.ch[0]==117 && c.ch[1]==22) {scale += 0.1;  goto lbl_1; }
   if(c.ch[0]==100 && c.ch[1]==32) {scale -= 0.1;  goto lbl_1; }
   if(c.ch[0]==115 && c.ch[1]==31)
   {  if(kl==0) kl=1;
      else kl=0;  goto lbl_1; }

//   getch();
   closegraph();

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