Стрелковое оружие третьего рейха - Прикольные надписи

Только вот молчит сожалению.
мы не верим... это не он.это леон... или ОН?
да он конечно, кто еще.что вы все такие неверующие?
написать программу для изображения многогранника, вращающегося вокруг оси оу.ось вращения не должна совпадать собственной вертикальной осью фигуры.октаэдрпроекция:перспектива (1 точки схода)при выполнении этого задания необходимо реализовывать алгоритм удаления невидимых линий.все грани рисовать закрашеными различными цветами.
Октаэдр вращается полкруга нормально,а затем нижняя его часть пропадает,верхняя же вращается как не бывало...кто имеет опыт программирования этой области,посмотрите,пожалуйста код:program octahedron;uses crt,graph;type point_position array [1..3] of real;type side_position array [1..3] of point_position;type oct_coord array [1..8] of side_position;const Color: array[1..8] of Integer (1,2,3,4,5,6,9,10);{фигура Октаэдр}const oct: oct_coord= (((100,100,60),(50,100,-40),(100,50,-40)),((100,100,60),(50,100,-40),(100,150,-40)),((100,100,-140),(100,50,-40),(50,100,-40)),((100,100,-140),(100,150,-40),(50,100,-40)),((100,100,-140),(150,100,-40),(100,50,-40)),((100,100,-140),(100,150,-40),(150,100,-40)),((100,100,60),(100,50,-40),(150,100,-40)),((100,100,60),(150,100,-40),(100,150,-40)));const p=-0.002;varpcos,psin:real;oct_new,oct_old:oct_coord;dv,mv,x0, y0: integer;procedure init;var i,j,k:integer;beginx0 стрелковое оружие третьего рейха := getMaxX div 2;y0 := getMaxY div 2;for i:=1 to High(oct) dofor j:=1 to High(oct[i]) dofor k:=1 to High(oct[i,j]) dobeginoct_new[i,j,k] := oct[i,j,k];oct_old[i,j,k] := oct[i,j,k];end;end;{алгоритм робертса}function robert(side:side_position):boolean;vara,b,c:real;i,j:integer;beginc:=0;robert:=true;for i:=1 to high(side) dobeginif i=high(side) then j:=1else j:=i+1;c:=c+(side[i,1]-side[j,1])*(side[i,2]+side[j,2]);end;if c<=0 then robert:=false;end;{процедура получения перспективы одной точке схода}procedure modif(x,y,z:real;var x1,y1,z1:real);beginx1:=x/(p*y+1);y1:=y/(p*y+1);z1:=z/(p*y+1);end;{прорисовка/стирание октаэдра зависимости от флага new}procedure draw_oct(new: boolean;figure:oct_coord);vari,j,k:integer;area: array [1..3] of PointType;new_side:side_position;beginsetcolor(0);for i:=1 to high(oct_new) dobeginfor k:=1 to high(new_side) dobeginmodif(figure[i,k,1], figure[i,k,2], figure[i,k,3],new_side[k,1],new_side[k,2],new_side[k,3]);end;if robert(new_side) thenbeginif new thenbeginsetFillStyle(solidfill, Color[i]);endelse beginsetFillStyle(solidfill, 0);end;for j:=1 to High(new_side) dobeginarea[j].:=x0+ round(new_side[j,1]);area[j].:= round(new_side[j,2]);end;fillpoly(sizeOf(area) div sizeOf(pointtype),area);end;end;end;{поворот октаэдра}procedure rotate;vari, j: integer;x_new, z_new: real;beginfor i:=1 to High(oct_new) dofor j:=1 to High(oct_new[1]) dobeginoct_old[i,j,1] := oct_new[i,j,1];oct_old[i,j,3] := oct_new[i,j,3];x_new:=oct_new[i,j,1]*pcos-oct_new[i,j,3]*psin;z_new:=oct_new[i,j,1]*psin+oct_new[i,j,3]*pcos;oct_new[i,j,1]:=x_new;oct_new[i,j,3]:=z_new;end;end;{основная часть программы}beginpcos:=cos(0.05);psin:=sin(0.05);dv := detect;initGraph(dv,mv,'');init;repeatrotate;draw_oct(false,oct_old);draw_oct(true,oct_new);delay(10000);until keypressed;closegraph;end.