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

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

.cpp
Скачиваний:
20
Добавлен:
16.04.2013
Размер:
2.6 Кб
Скачать
//ђЁб®ў ­ЁҐ Ї®  «Ј®аЁв¬г ‚-бЇ« ©­®ў Ї®ўҐае­®бвЁ 
//(г¤ «®бм ҐҐ б¤ вм в®«мЄ® Ѓ «Ё­®ўЁзг,   ў®в Љ®а­ҐҐў ¤ ¦Ґ ᬮваҐвм ­Ґ бв «)
//‚лЇ®«­Ё« Ѓ аЄ®ў ЊЏ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