Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
//ђЁб®ў ЁҐ Ї® «Ј®аЁв¬г ‚-бЇ« ©®ў Ї®ўҐае®бвЁ
//(г¤ «®бм ҐҐ б¤ вм в®«мЄ® Ѓ «Ё®ўЁзг, ў®в Љ®аҐҐў ¤ ¦Ґ ᬮваҐвм Ґ бв «)
//‚лЇ®«Ё« Ѓ аЄ®ў ЊЏ40
#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 REPERS[4][4];
void main(void)
{
clrscr();
int driver=VGA;
int mode=VGAHI;
palettetype pal;
initgraph(&driver,&mode,"E:\\c3.1\\BGI");
cleardevice();
getpalette(&pal);
REPERS[0][0].x=-4.47; REPERS[0][0].y=-6; REPERS[0][0].z=0;
REPERS[0][1].x=-1.49; REPERS[0][1].y=-6; REPERS[0][1].z=4.2;
REPERS[0][2].x=1.49; REPERS[0][2].y=-6; REPERS[0][2].z=4.2;
REPERS[0][3].x=4.47; REPERS[0][3].y=-6; REPERS[0][3].z=0;
REPERS[1][0].x=-2.4; REPERS[1][0].y=-2; REPERS[1][0].z=0;
REPERS[1][1].x=-0.8; REPERS[1][1].y=-2; REPERS[1][1].z=2.26;
REPERS[1][2].x=0.8; REPERS[1][2].y=-2; REPERS[1][2].z=2.26;
REPERS[1][3].x=2.4; REPERS[1][3].y=-2; REPERS[1][3].z=0;
REPERS[2][0].x=-2.4; REPERS[2][0].y=2; REPERS[2][0].z=0;
REPERS[2][1].x=-0.8; REPERS[2][1].y=2; REPERS[2][1].z=2.26;
REPERS[2][2].x=0.8; REPERS[2][2].y=2; REPERS[2][2].z=2.26;
REPERS[2][3].x=2.4; REPERS[2][3].y=2; REPERS[2][3].z=0;
REPERS[3][0].x=-4.47; REPERS[3][0].y=6; REPERS[3][0].z=0;
REPERS[3][1].x=-1.49; REPERS[3][1].y=6; REPERS[3][1].z=4.2;
REPERS[3][2].x=1.49; REPERS[3][2].y=6; REPERS[3][2].z=4.2;
REPERS[3][3].x=4.47; REPERS[3][3].y=6; REPERS[3][3].z=0;
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],3+4*i,3+4*i,0);
}
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+=(REPERS[i][j].x)*d;
yy+=(REPERS[i][j].y)*d;
zz+=(REPERS[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