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

Лабы / 4 / Vova&Dima / BEZ_GIP1

.CPP
Скачиваний:
20
Добавлен:
16.04.2013
Размер:
1.78 Кб
Скачать
//Ѓ®Ј¤Ґ«м ЇҐаҐ¤Ґ« « « Ўг Ѓ аЄ®ў . ’ҐЇҐам ®­  аЁбгҐв Є®­гб
//ЋЇпвм ¦Ґ б¤ вм ҐҐ ¬®¦­® в®«мЄ® Ѓ «Ё­®ўЁзг, ­® ­Ґ Љ®а­ҐҐўг
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<iostream.h>
#include<graphics.h>

int fact(int k)
{
 if (k<0) return 0;
 if (k==0) return 1;
 return k*fact(k-1);
}

float expo(float a,int n)
{
 if (n==0) return 1;
 if (a==0) return 0;
 if (n>0) return a*expo(a,n-1);
 if (n<0) return expo(a,n+1)/a;
}

int C(int m,int i)
{
 return (fact(m))/(fact(i)*fact(m-i));
}
struct point{float x,y,z;};
point P[4][4] = {
	{ {-6,-6,0}, {-4.2,-6,4.2}, {4.2,-6,4.2}, {6,-6,0} },
	{ {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
	{ {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
	{ {-6,6,0}, {-4.2,6,4.2}, {4.2,6,4.2}, {6,6,0} },
};

void main(void)
{
 clrscr();
int driver=VGA;
int mode=VGAHI;
palettetype pal;
initgraph(&driver,&mode,"D:\\compiler\\bc\\BGI");
cleardevice();
getpalette(&pal);
int k=0;
float d,xx,yy,zz,u,v;
float xv,yv;
float xwmax=4.5, xwmin=-4.5, ywmax=6.1, ywmin=-6.1,
      xvmax=0.8, xvmin=0.2, yvmax=0.9, yvmin=0.1;

for(int i=0;i<pal.size;i++)
     {
      setrgbpalette(pal.colors[i],0,0,4*i+15);
     }

for(u=0;u<=1;u+=0.002)
 {
   for(v=0;v<=1;v+=0.005)
    {
      xx=0;yy=0;zz=0;
      for(i=0;i<=3;i++)
       {
	for(int j=0;j<=3;j++)
	 {
	  d=C(3,i)*C(3,j)*expo(u,i)*expo(1-u,3-i)*expo(v,j)*expo(1-v,3-j);
	  xx+=(P[i][j].x)*d;
	  yy+=(P[i][j].y)*d;
	  zz+=(P[i][j].z)*d;
	 }
       }
      xv=(xvmin+(((xvmax-xvmin)/(xwmax-xwmin))*(xx-xwmin)))*640;
      yv=(yvmin+(((yvmax-yvmin)/(ywmax-ywmin))*(yy-ywmin)))*480;


	for(i=0;i<pal.size;i++)
       {
	if((zz>=0.27*i)&&(zz<0.27*(i+1))) {k=i; break;}
	}
      putpixel(xv,yv,k);
    }
 }

getch();
closegraph();
}
Соседние файлы в папке Vova&Dima