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

Лабы / 4 / Natasha / IGS2A

.PAS
Скачиваний:
20
Добавлен:
16.04.2013
Размер:
2.82 Кб
Скачать
{ќвг Їа®Ја ¬¬л аЁб®ў ­Ёп Ї®ўҐае­®бвЁ Є®­гб  ¬Ґв®¤®¬ ‚-бЇ« ©­®ў ўв®а®Ј® Ї®ап¤Є 
ЇаЁ§Ґ­в®ў «  ¬­Ґ † аЄ®ў  Ќ в и  (ЊЏ40). —ҐЈ®-⮠ᮢᥬ ­ҐаҐ «м­ п Їа®ҐЄжЁп дЁЈгал}
Uses CRT, Graph;
const st = 80;
var i,j,x,y,z,ShX,ShY,d,stX,stY,fiXY,fiXZ:integer;
ch: Char;
a:Array [0..3,0..3,1..3] of integer;
b:Array [0..st,0..st,1..3] of Integer;
GraphDriver : integer;
GraphMode : integer;


Function L0(t:Real):Real;
begin
L0:=(1-t)*(1-t)*(1-t);
end;
Function L1(t:Real):Real;
begin
L1:=3*t*(1-t)*(1-t);
end;
Function L2(t:Real):Real;
begin
L2:=3*t*t*(1-t);
end;
Function L3(t:Real):Real;
begin
L3:=t*t*t;
end;

procedure Draw(x,y,z:LongInt);
var x0,y0:Integer;
begin
x0:=Round(x*d/(z+d));
y0:=Round(y*d/(z+d));
if z<0 then PutPixel(x0+ShX,y0+ShY,Blue)
else PutPixel(x0+ShX,y0+ShY,LightBlue)
end;


function Bez(v00,v01,v02,v03,v10,v11,v12,v13,v20,v21,v22,v23,v30,v31,v32,v33:Integer;u,v:Real):Integer;
begin
Bez:=Round(v00*L0(u)*L0(v)+v01*L0(u)*L1(v)+v02*L0(u)*L2(v)+v03*L0(u)*L3(v)
+v10*L1(u)*L0(v)+v11*L1(u)*L1(v)+v12*L1(u)*L2(v)+v13*L1(u)*L3(v)
+v20*L2(u)*L0(v)+v21*L2(u)*L1(v)+v22*L2(u)*L2(v)+v23*L2(u)*L3(v)
+v30*L3(u)*L0(v)+v31*L3(u)*L1(v)+v32*L3(u)*L2(v)+v33*L3(u)*L3(v));
end;


begin
d:=1000;
GraphDriver := Detect;
InitGraph(GraphDriver, GraphMode, 'egavga.bgi');
ShX:=GetMaxX div 2;
ShY:=GetMaxY div 2;

{for i:=0 to 15 do
SetRGBPalette(i,0,0,Trunc(256*i/15));
}
For i:=0 to 3 do
begin
a[i,0,1]:=Round(5*cos(Pi*i/6));
a[i,0,3]:=Round(5*sin(Pi*i/6));
a[i,1,1]:=Round(75*cos(Pi*i/6));
a[i,1,3]:=Round(75*sin(Pi*i/6));
a[i,2,1]:=Round(125*cos(Pi*i/6));
a[i,2,3]:=Round(125*sin(Pi*i/6));
a[i,3,1]:=Round(200*cos(Pi*i/6));
a[i,3,3]:=Round(200*sin(Pi*i/6));
end;

for i:=0 to 3 do
For j:=0 to 3 do
begin
a[i,j,2]:=Trunc(Sqrt(Abs(Sqr(a[i,j,1])+Sqr(a[i,j,3]))));
end;


for i:=0 to st do
for j:=0 to st do
begin
x:=Bez(a[0,0,1],a[0,1,1],a[0,2,1],a[0,3,1],
a[1,0,1],a[1,1,1],a[1,2,1],a[1,3,1],
a[2,0,1],a[2,1,1],a[2,2,1],a[2,3,1],
a[3,0,1],a[3,1,1],a[3,2,1],a[3,3,1],i/st,j/st);
y:=Bez(a[0,0,2],a[0,1,2],a[0,2,2],a[0,3,2],
a[1,0,2],a[1,1,2],a[1,2,2],a[1,3,2],
a[2,0,2],a[2,1,2],a[2,2,2],a[2,3,2],
a[3,0,2],a[3,1,2],a[3,2,2],a[3,3,2],i/st,j/st);
z:=Bez(a[0,0,3],a[0,1,3],a[0,2,3],a[0,3,3],
a[1,0,3],a[1,1,3],a[1,2,3],a[1,3,3],
a[2,0,3],a[2,1,3],a[2,2,3],a[2,3,3],
a[3,0,3],a[3,1,3],a[3,2,3],a[3,3,3],i/st,j/st);
b[i,j,1]:=x;
b[i,j,2]:=y;
b[i,j,3]:=z;
Draw(b[i,j,1],b[i,j,2],-b[i,j,3]);
Draw(b[i,j,1],-b[i,j,2],-b[i,j,3]);
Draw(-b[i,j,1],b[i,j,2],-b[i,j,3]);
Draw(-b[i,j,1],-b[i,j,2],-b[i,j,3]);
end;

for i:=0 to st do
for j:=0 to st do
begin
Draw(b[i,j,1],b[i,j,2],b[i,j,3]);
Draw(b[i,j,1],-b[i,j,2],b[i,j,3]);
Draw(-b[i,j,1],b[i,j,2],b[i,j,3]);
Draw(-b[i,j,1],-b[i,j,2],b[i,j,3]);
end;
Repeat
until Keypressed;
end.