Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
//Ѓ®Ј¤Ґ«м ЇҐаҐ¤Ґ« « « Ўг Ѓ аЄ®ў . ’ҐЇҐам ® аЁбгҐв Є®гб
//ЋЇпвм ¦Ґ б¤ вм ҐҐ ¬®¦® в®«мЄ® Ѓ «Ё®ўЁзг, ® Ґ Љ®аҐҐўг
#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