//#########################################################################
//##              Г Р А Ф И Ч Е С К А Я   О Б О Л О Ч К А                ##
//##         "  Отображение функции ,задаваемой аналитическим путём  "   ##
//##           АЛЬТЕРНАТИВНОЕ ОКНО                                       ##
//## студент    :    Ратаев М.Ю.                                         ##
//#########################################################################

//__________________________________________________________________________
//|   Отображение окна с  графическим  изображением функции                |
//|________________________________________________________________________|

void VideoGraf(int X1,int Y1,int X2,int Y2)
{
int   minX ,minY ;
float Xr1,Xr2,Yr1,Yr2;
int i,j,k;
int PalInt=20 , Promeg,PromegPred;
int Xkor,Ykor;
int flagD;

//     вычисление области отображения
Xmin=Xg[0];
Ymin=Xg[1];
Zmin=Xg[2];
Xmax=Yg[0];
Ymax=Yg[1];
Zmax=Yg[2];

Xdel=Xmax-Xmin;
Ydel=Ymax-Ymin;
Zdel=Zmax-Zmin;

//   отрисовка  плоскости  графика
  Xplot=Xdel/(X2-X1-4);
  Yplot=Ydel/(Y2-Y1-4);
  Zplot=Zdel/(PalInt);
     setlinestyle(SOLID_LINE,0,NORM_WIDTH);    //  стиль линий
     setcolor(WHITE);                          //  цвет текста

    minF=Zmax;
    minX=10;
    minY=10;
    setfillstyle(SOLID_FILL,BLACK);
   bar(X1+2,Y1+2,X2-2,Y2-2);
    setfillstyle(SOLID_FILL,WHITE);
    PromegPred=0;
  for ( i=0; i<X2-X1-4 ; i+=4)
  {  PromegPred=0;
    for ( j=0; j<Y2-Y1-4 ; j+=4)
      {  minFi=ff(Xmin+i*Xplot,Ymax-j*Yplot);
	if(minF>=minFi) {minF=minFi;
			 minX=i;
			 minY=j;
			 }

	 if((minFi>Zmin)&&(minFi<Zmax))
		{
		 Promeg=1+floor(fabs(minFi-Zmin)/Zplot);
		}
	    else Promeg=0;

	 if( PromegPred == Promeg)
	       { ; }
	   else{ PromegPred=Promeg;
		 bar(X1+i+2,Y1+j+2,X1+i+5,Y1+j+5);
	       //	 putpixel(X1+i+2,Y1+j+2,WHITE) ;
	       }
       }
      }
//    рисование   пути прохождения  алгоритма
   setlinestyle(SOLID_LINE,0,NORM_WIDTH);    //  стиль линий
   setcolor(LIGHTGRAY);
//проверка

  for ( i=1; i<colT ; i++)
   {  Xr1=XxX[i][0][0];
      Yr1=XxX[i][0][1];
      Xr2=XxX[i][1][0];
      Yr2=XxX[i][1][1];
  if(  ResRos(Xmin,Ymin,Xmax,Ymax,Xr1,Yr1,Xr2,Yr2 ))
	 line(X1+2+(int)((Xr1-Xmin)/Xplot),Y2-2-(int)((Yr1-Ymin)/Yplot),X1+2+(int)((Xr2-Xmin)/Xplot),Y2-2-(int)((Yr2-Ymin)/Yplot));
      Xr1=XxX[i][1][0];
      Yr1=XxX[i][1][1];
      Xr2=XxX[i][2][0];
      Yr2=XxX[i][2][1];
  if(  ResRos(Xmin,Ymin,Xmax,Ymax,Xr1,Yr1,Xr2,Yr2 ))
	 line(X1+2+(int)((Xr1-Xmin)/Xplot),Y2-2-(int)((Yr1-Ymin)/Yplot),X1+2+(int)((Xr2-Xmin)/Xplot),Y2-2-(int)((Yr2-Ymin)/Yplot));
      Xr1=XxX[i][2][0];
      Yr1=XxX[i][2][1];
      Xr2=XxX[i][0][0];
      Yr2=XxX[i][0][1];
  if(  ResRos(Xmin,Ymin,Xmax,Ymax,Xr1,Yr1,Xr2,Yr2 ))
	 line(X1+2+(int)((Xr1-Xmin)/Xplot),Y2-2-(int)((Yr1-Ymin)/Yplot),X1+2+(int)((Xr2-Xmin)/Xplot),Y2-2-(int)((Yr2-Ymin)/Yplot));
   }
// ОТОБРАЖЕНИЕ ПУТИ ПРОХОДА АЛГОРИТМА

  for ( i=1; i<colT ; i++)
  {   Xr1=Xx[i-1];
      Xr2=Xx[i];
      Yr1=Yy[i-1];
      Yr2=Yy[i];


     //отображение отрезка
  if(  ResRos(Xmin,Ymin,Xmax,Ymax,Xr1,Yr1,Xr2,Yr2 ))
		{
	LineV(X1+2+(int)((Xr1-Xmin)/Xplot),Y2-2-(int)((Yr1-Ymin)/Yplot),X1+2+(int)((Xr2-Xmin)/Xplot),Y2-2-(int)((Yr2-Ymin)/Yplot),15,0);

	putPoint(X1+2+(int)((Xr1-Xmin)/Xplot),Y2-2-(int)((Yr1-Ymin)/Yplot),15,0);
	putPoint(X1+2+(int)((Xr2-Xmin)/Xplot),Y2-2-(int)((Yr2-Ymin)/Yplot),15,0);

		 }
 }
 //    рисование рамки
FrameO( X1, Y1, X2, Y2,WHITE,DARKGRAY);

//    рисование координатных осей
   setlinestyle(SOLID_LINE,0,NORM_WIDTH);    //  стиль линий
   setcolor(WHITE);
    if ((Xmin<0)&&(Xmax>0))   { Xkor=X1+2+floor(-Xmin/Xplot);
			      line(Xkor,Y1,Xkor,Y2 );
			      line(Xkor,Y1,Xkor-3,Y1+10 );
			      line(Xkor,Y1,Xkor+3,Y1+10 );
			      }
    if ((Ymin<0)&&(Ymax>0))   { Ykor=Y1+2+floor(Ymax/Yplot);
			      line(X1,Ykor,X2,Ykor );
			      line(X2-10,Ykor+3,X2,Ykor );
			      line(X2-10,Ykor-3,X2,Ykor );
			      }
//  рисование  точки минимума
    putPoint(X1+minX+2,Y1+minY+2,5,0);
//    putPoint5(X1+minX+2,Y1+minY+2,15,0);


 return ;
}

