/*
* Вычисление меры отличия траекторий
* Автор:Лукашенко О.В.  lukashen@cs.karelia.ru
* Описание: В качестве параметров предаются 2 файла:
* файл с исходными координатами и файл с точками поворота 
*/
//---------------------------------------------------------------------------
#include <stdio.h>
#include <math.h>
FILE *fin1, *fin2, *fout, *f;
float input[1000][2], output[1000][2];
int get (float *x, float *y, FILE *ff)
{
  fscanf (ff, "%f %f", x, y);

  if (feof (ff))
    return -1;

  return 0;
}
int main(int argc, char* argv[])
{
float  x1, y1, x2, y2;
int i=0, m, k=1;
float A, B=1, C, R, max=-1;
  if (argc != 3)
  return 1;
 if ((fin1 = fopen (argv[1], "r")) == NULL)
    {
      perror (argv[1]);
      return 1;
    }
 if ((fin2 = fopen (argv[2], "r")) == NULL)
    {
      perror (argv[1]);
      return 1;
    }
 //считываем данные
  while (get (&x1, &y1, fin1)!=-1){
  input[i+1][0]=x1;
  input[i+1][1]=y1;
  i++;
  }
  i=0;
  while (get (&x1, &y1, fin2)!=-1){
  output[i+1][0]=x1;
  output[i+1][1]=y1;
  i++;
  }
  m=i;
  fclose(fin1);
  fclose(fin2);
//непосредственно вычисление меры
  for(i=1;i<m;i++){
  //находим уравнение прямой между двумя соседними точками поворота
  A=(output[i+1][1]-output[i][1])/(output[i][0]-output[i+1][0]);
  C=-A*output[i][0]-output[i][1];
  while((input[k][0]!=output[i+1][0])||(input[k][1]!=output[i+1][1])){
 //находим расстояние от пропущенных точек до данной прямой
  R=fabs(A*input[k][0]+B*input[k][1]+C)/sqrt(A*A+B*B);
 //находим среди этих расстояний наибольшее
  max=(R>max) ? R :max;
  k++;
  }
  }
  //printf("%.4f",max);
  f=fopen(argv[2],"a+");
//выводим результат
  fprintf(f,"%.4f\n",max);
  fclose(f);
        return 0;
}
//---------------------------------------------------------------------------
